Какие вещи будут вызывать ошибку приложения в MVC? - PullRequest
1 голос
/ 09 декабря 2011

Я смотрю на обработку ошибок.Я нашел следующий код:

  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 ]

4 голосов
/ 09 декабря 2011

@ cebirci ответил на ваш вопрос. Однако я настоятельно рекомендую вам не использовать Application_Error в MVC, поскольку в MVC есть встроенные способы обработки ошибок.

Прежде всего, у вас есть атрибут [HandleError], которым вы можете украшать свои контроллеры и / или действия. Он будет отображать представление Shared\Error.cshtml каждый раз, когда обрабатывается необработанное исключение.

Проблема с [HandleError] заключается в том, что он не может позаботиться о Не найден (404). Для обработки 404 вам необходимо создать контроллер ошибок и настроить customErrors в web.config.

Я опишу это более подробно в моем блоге .

3 голосов
/ 09 декабря 2011

Application_Error метод обрабатывает все исключения, которые выдает ваше приложение. Если вы хотите обработать пользовательскую ситуацию, такую ​​как повторяющаяся запись, вы можете выдать исключение, подобное этому:

if(entriesDuplicated)
{
   throw new Exception("The message that describes the error");
}

Будет обработано методом Application_Error.

...