I've got the following IHttpModule
and I'm trying to figure out how to execute an action from a controller for a given absolute or relative URL.
public class CustomErrorHandlingModule : IHttpModule
{
#region Implementation of IHttpModule
public void Init(HttpApplication context)
{
context.Error += (sender, e) =>
OnError(new HttpContextWrapper(((HttpApplication)sender).Context));
}
public void Dispose()
{}
public void OnError(HttpContextBase context)
{
// Determine error resource to display, based on HttpStatus code, etc.
// For brevity, i'll hardcode it for this SO question.
const string errorPage = @"/Error/NotFound";
// Now somehow execute the correct controller for that route.
// Return the html response.
}
}
How can this be done?
I think you need to use
HttpContext.Current.RewritePath
This lets you change the path for the file you want to use. It's what the
default.aspx
created in MVC 2 projects does.I've used it in much the same way you are, to do error handling without a 302 but can't get to my code right now. I'll post some code on Monday.
Hi use this to let the framework execute the code for that path using the routing and all the components :
And ideally the request processing is completer at this point. If this is not the case and if the request is further processed along the asp.net http pipeline, then use this to stop the request at this point, and tell asp.net that we're done with this request :
Im not sure if the context has the Application (im not near VS now) but use it to stop the request in this module if needed.
You can using HttpContext:
Something along the lines should do the job:
You might also find the following related answer useful.