我正在查看错误处理。我找到了以下代码:
protected void Application_Error(object sender, EventArgs e)
{
var exception = this.Server.GetLastError();
this.Response.Clear();
this.Server.ClearError();
var errorRoute = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
var tenant = errorRoute.Values["tenant"].ToString();
var route = new RouteValueDictionary
{
{ "controller", "Error" },
{ "action", "Index" },
{ "tenant", tenant }
};
if (exception != null)
{
route.Add("message", exception.Message);
}
this.Response.RedirectToRoute(route);
}
但是什么可能导致application_error?这是用户生成的东西,比如数据库中有重复的条目,还是只是某种系统异常?
答案 0 :(得分:4)
@cebirci回答了你的问题。但是,我强烈反对在MVC中使用Application_Error
,因为MVC中有内置的方法来处理错误。
首先,您获得了[HandleError]
属性,您可以使用该属性来装饰您的控制器和/或操作。每次捕获到未处理的异常时,它都会呈现视图Shared\Error.cshtml
。
[HandleError]
的问题在于它无法处理Not Found(404)。要处理404,您需要创建一个错误控制器并在web.config中配置customErrors。
我在my blog中详细描述了它。
答案 1 :(得分:3)
Application_Error
方法处理应用程序抛出的所有异常。如果要处理重复条目等自定义情况,可以抛出这样的异常:
if(entriesDuplicated)
{
throw new Exception("The message that describes the error");
}
将以Application_Error
方法处理。