Difference Between Using Global.asax And Web.config For Error Handling?
Apr 16, 2010
I'm working on a small web application, and I wanted the user to be redirected to a simple error page anytime an exception was encountered. So I wanted to redirect the user to generic Error page "Oooops.aspx" that will log the error in page_load.
I'm thinking that I can use Application_Error in Global.asax, where I can redirect to "Oooops.aspx" so that it displays a friendly error page and it logs the exception (through Server.GetLastError()). I can also use web.config and add "<customErrors mode="On" defaultRedirect="Oooops.aspx"/>" It'll redirect me to a friendly error page and it will also log the exception. What's the difference between these two? Should I use both of them, or just one? And which should I use?
I am handling errors in Global.asax. When I encounter an error in certain pages, the Application_Error event fires twice. On the second trip, Server.GetLastError() returns null. I have a simple page where I throw an error in page load. When that page throws an error the code below works fine. I also have a more complex page with an update panel and many controls. When that page throws an error Application_Error fires twice. I suspect the update panel but update panels are always suspect, right?
There are no try/catch blocks on any of my pages I'm testing with. Custom errors in web.config is commented out. Note that logging and busywork in the Application_Error event are commented out. I'm pretty much just doing a respone.redirect. The problem with the the event firing twice is that the response.redirect fails with an error msg stating that headers have already been sent (adding Context.ClearError and Response.Clear does nothing to fix that).
Fine and dandy... I like that mode="RemoteOnly" facilitates development...
For unhandled exceptions, I have in global.asax:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Response.Redirect("GenericError.aspx") End Sub
However, unhandled exceptions are going to the generic error page instead of the informative yellow screen of death preferred by developers. I can comment out the redirect in global.asax, but then I need to remember to change it for the production environment. Is there a way I can check in Application_Error whether I am remote or not to determine whether to redirect?
I need to redirect some of the older pages in my application to new pages. I thought urlMapping in web.config is the efficient way to achieve this. But there is also another way to redirect using global.asax. Which one is the efficient way for this. At what point in request execution does this asax and config file comes into the picture?
I have an ASP.NET application where i am tracking my applicaion level erros using golabl.asax On_Error method.I will send an email to my id when there is some error happened in the site(ie :" when the application _error being invoked) Now From my global.asax's Application_OnError event, how can i get the URL of the page where this error was raised ?
I want to make sure of one thing. I have implemented the Application_Error() method of Global.asax. In my application some where I have a try catch. If an exception is trown and that exception is handled by a catch block. Does this envoke the Application_Error() method in the global.asax
When it gets to the page servererror/default.aspx I need it to send an e-mail to me with the exception.message
Here's what i'm trying but it won't work
Sub Page_load(ByVal sender As Object, ByVal e As EventArgs) Dim LastError As Exception Dim ErrMessage As String LastError = Server.GetLastError() ErrMessage = LastError.Message
i have the following code in my global.ascx and when i click a generate error button the code gets run but seems to fail on the insert error into the DB.
I want the error to be saved to the DB and redirect to default.aspx.
pretty standard stuff.
the error i get is: exe.Message = "Incorrect syntax near 'System'." (looks like somethign with the SQL objects used in global.asx)
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs Exception ex = Server.GetLastError(); StringBuilder theBody = new StringBuilder(); theBody.Append("Error Message: " + ex.ToString() + "
In the global.asax file, I capture the error details (if one occurs) and I have it send that error detail to an email address.
I am finding that it's reporting all sorts of strange ones when the website gets hit with a crawler....or at least I think it is. ( HTTP_USER_AGENT: Mozilla/4.0 (compatible; Synapse)).
The following are common errors that repeat multiple times at the same date and time:
Error Message: Input string was not in a correct format. Error Message: Invalid character in a Base-64 string. Error Message: Unable to validate data. Error Message: The serialized data is invalid.
When I run my app locally I get no errors. No error from Global.asax, no redirection to an error page. Everythings works fine.
When I deploy my app to a test server, my app run there with no errors. No error from Global.asax, no redirection to an error page. Everythings works fine on the test server.
But when I deploy my app to production server, the app runs fine but I keep getting errors (emailed to me) from Global.asax. On production server we have these security apps that run and keep hitting all URLs of the app on the server. Just to make sure they are working fine. When these security app hit URL of my app, my application runs fine but it gives out this global.asax error. The funny thing is that error is empty. The error are emailed to me and the email is empty. Nothing there.
There are several other apps running on the same server. My app has its own app pool and is configured correctly.
I know there is a couple answered questions on here regarding "request scoped" globals, but I want to nit-pick on something specifically and maybe squeeze some extra enlightenment out of one or two of you.I have an ASP.NET C# Website and a static Dictionary of objects (loaded from DB once on Application start). Each page request will need to do a lookup in the Dictionary (based on a key derived from the request url/etc) and get the appropriate object.The issue is I'm trying to maximize efficiency by reducing the lookups to the Dictionary per Request. Doing just a single lookup within a Page itself is easy enough and I can pass the object to sub controls, etc too.. but global.asax is separate from the Page and it also needs to use the object (in Application_BeginRequest and Session_Start).
So is doing a Dictionary lookup once in Application_BeginRequest, once (when necessary) in Session_Start and once in the Page negligible speed wise, even if there are many requests coming in every second?I would like it if I could just have a Request scoped global variable that I can easily call upon.. the only one I see available though is HttpContext.Current.Items and that is a Dictionary itself.Am I beingridiculously nit-picky with my concern over efficiency? or will these milliseconds (nanoseconds?) get me in the long run when more and more requests are being made?
PS. I currently only have around 100 objects in the Dictionary although this may increase in the future.
When debugging my application, I m getting an application level error in global.asax file. The Server.GetLastError() reads "File does not exist." but thats it. No more details on the filename or the location where the code is trying to find a file. I commented out the application_error method, with a hope that the exception would be thrown when the debug the application, but no errors were thrown. How do i find the source of the error, cos I want to resolve this issue by either putting the file that the application is looking for or by completely removing the code that is referencing the file.
Is it possible in the global.asax file on session_start to check if a url string exists and it it does insert the string into a sql database? The url would be something link http://www.mysite.com?campaign=january.
I would want to capture the january bit and put that in the database for each visitor that uses that url.
I have a hosting account on DailyRazor.com , i use Global.asax in my project to start a schedule process in Application_Start.When i just publish my website, and upload it, the Application_Start does not Fire, but when i upload the Global.asax to my host it gives an Error but the Applicaiton_Start Event fires up, and then i delete the Global.asax file and everything works.just wondering, What am doing wrong ? or why this meaningless thing happens?
I have a site with multiple domains pointing to it. I wanted to redirect all requests to main domain so I've created a method called RedirectToRealDomain("domain.com") to check and redirect all requests to my preferred domainAt the moment it lives on Session_Start but I am planing to move it to Application_BeginRequest event. As I understand Session_Start only raised when new session started but Application_BeginRequest raised on all requests. RedirectToRealDomain method doesn't do any DB lookups or anything expensive apart from comparing strings.
I am trying to check if the user belongs to someone's friendlist from the database and redirect him accordingly.I am doing this in a routehandler called by Global Asax.I just want to know how to get the username (from the login information) in the route handler class (or Global asax)I used this: string username = HttpContext.Current.User.Identity.Name; and very strangely, its assigning ".aspx" as the username!! ps: i did search for similar question but in vain.
I need replace double slashes in one slash. I am planning do this in Global.asax Application_BeginRequest event. Is it enough? or better do a http module?
UPD Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) ' Fires at the beginning of each request
I was under the impression till now that Global.asax is used for application level events and it's a common file for all users. Then what does Session_Start event does in this file. If we have to create user session varaibles then Is this the write place to create those? If someone can kindly clear my confusion on this file and it's methods.
I'm trying to handle all my application exceptions inside the global.asax but from some reason it's not firing at all, i never tried to do it before so i guess i'm doing something wrong here...
here is the code inside the default.aspx page that throw the error: