通过Application_Error对ASP.NET MVC的所有异常进行默认指向,也可以通过webConfig的 <customErrors mode="RemoteOnly" defaultRedirect="\Error\Index">
<error statusCode="403" redirect="\Error\Http404" />
<error statusCode="404" redirect="\Error\Http404" />
</customErrors>
来指定,不过这样的记录日志异常就需要在ErrorController中进行了
转载:http://stackoverflow.com/questions/1171035/asp-net-mvc-custom-error-handling-applicationerror-global-asax
Instead of creating a new route for that, you could just redirect to your controller/action and pass the information via querystring. For instance:
protected void Application_Error(object sender, EventArgs e) {
Exception exception = Server.GetLastError();
Response.Clear();
HttpException httpException = exception as HttpException;
if (httpException != null) {
string action;
switch (httpException.GetHttpCode()) {
case 404:
// page not found
action = "HttpError404";
break;
case 500:
// server error
action = "HttpError500";
break;
default:
action = "General";
break;
}
// clear error on server
Server.ClearError();
Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));
}
Then your controller will receive whatever you want:
// GET: /Error/HttpError404
public ActionResult HttpError404(string message) {
return View("SomeView", message);
}
There are some tradeoffs with your approach. Be very very careful with looping in this kind of error handling. Other thing is that since you are going through the ASP.NET pipeline to handle a 404, you will create a session object for all those hits. This can be an issue (performance) for heavly used systems.
Cheers,
André Carlucci