This question is kind of related to Handle URI hacking gracefully in ASP.NET in that it's too about how to best handle exceptions that occur during an ASP.NET request lifecycle. I've found a way to handle most exceptions gracefully, but then I've found that some exceptions occur so late in the request that there's no way to do stuff like Server.Transfer
to compartementalize the whole error presentation logic into its own page.
So, I have to handle the exception inside the Application_Error
event instead, and do Response.Write
s and whatnot. It's ugly. I understand that in some circumstances the response stream could have already been flushed, so transferring the request isn't really an option. What I want to ask is if there's anyone who's found an elegant solution to this problem?
Also, I find it difficult to know when I can handle the exception gracefully by transferring the request to another page and not. What is the best way to find out where in the request lifecycle we're at when an exception occurs? If it occurs during the loading and rendering of a page, Page_Error
will be able to handle it and I've not had a problem doing Server.Transfer
there yet. But if the exception occurs either too early or too late for Page_Error
to catch it and it bubbles to Application_Error
, what do I do to know whether it's early or late?
If it's late in the lifecycle, I'll probably have to do Response.Write
directly from Application_Error
, but if it's early I can do Server.Transfer
. The problem is that trying to do Server.Transfer
will itself cause an exception if it's too in the request to do it.
So, is there a global enumeration or something similar that will indicate whether it's too late to do creative stuff with the response or not?