Reputation: 272
I have the following code which handles all execptions that occur outside of action results (where the HandleErrorAttribute cannot reach).
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = (HttpException)exception;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException == null)
{
routeData.Values.Add("action", "Home");
}
else //It's an Http Exception, Let's handle it.
{
routeData.Values.Add("action", "Handle");
}
// Pass exception details to the target error View.
routeData.Values.Add("error", httpException);
// Clear the error on server.
Server.ClearError();
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
// Call target Controller and pass the routeData.
IController errorController = new SPP.Areas.UI.Controllers.ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
This does the job just fine. It executes the "Handle" action on the "Error" controller just like I have set it. No problem.
When inside the action it then throws another exception which is then picked up by my HandleErrorAttribute filter. After debugging it I can clearly see it is looking for the following paths.
I am using the Razors view engine along with Areas. My reason for doing this. So I can keep my application nice a tidy. My problem is that it looks like I am being forced to create a directory within my application just so this file can sit inside it...I am not a fan of this.
I would much rather prefer it going to the following location.
Or something like...
Now I CAN resolve this by creating that directory at the root of the application.
The reason I have not done this is because if I start caving in and using an easy way out approach. My applications will get very messy very quickly. I like to be the one who defines where my files and folders live.
If anyone knows of a way to set the direct path, or tell the IController (errorcontroller) to look in the Area in which it has been instanciated I will love you forever.
Any help will be much appreciated.
Steve
Upvotes: 1
Views: 292