Reputation: 33
I have some code to display a button if a URL exists:
try
{
string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
WebRequest req = WebRequest.Create(dashboardURL);
WebResponse response = req.GetResponse();
btnDashboard.Visible = true;
}
catch (Exception)
{
btnDashboard.Visible = false;
}
However, when debugging, req.getResponse()
causes Application_Error
to fire. I checked the exception being caught here and it is a System.Net.WebException
. My understanding was that Application_Error
is fired for unhandled exceptions.
If I change the code to force an exception as follows:
try
{
string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
WebRequest req = WebRequest.Create(dashboardURL);
int j = 0;
int i = 1 / j;
WebResponse response = req.GetResponse();
btnDashboard.Visible = true;
}
catch (Exception)
{
btnDashboard.Visible = false;
}
then Application_Error
is not fired, which is good. Is there something particular about handling errors with GetResponse()
that always causes Application_Error
to fire, even if the exception is handled?
Upvotes: 3
Views: 2161
Reputation: 21599
Is the /Dashboard/Default.aspx
in the same server/application?
If so then processing of that request can cause an error that will be captured by the Application_Error
. The reason is that by doing GetResponse()
you are doing a HTTP request, and any exceptions that happen while processing the request on (potentially) remote server will not be handled by try/catch on the calling code. In your special case remote server = local server, but the idea does not change.
Upvotes: 1
Reputation: 128
In Application_Error check the exception:
var exception = Server.GetLastError();
It is impossible that Application_Error is fired with this code. Your exception must be after this try/catch Block.
Also try to Clean and Rebuild your solution, or force the Designer File to get recreated (Change something on aspx file).
I tested your code on different ASP.NET Version, even on MVC3/MVC4 Environment and Application_Error is never fired!
Upvotes: 2