什么样的事情会在MVC中调用应用程序错误?

时间:2011-12-09 08:31:03

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我正在查看错误处理。我找到了以下代码:

  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?这是用户生成的东西,比如数据库中有重复的条目,还是只是某种系统异常?

2 个答案:

答案 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方法处理。