Как мне обработать необработанные исключения в приложении ASP.NET MVC 3? - PullRequest
19 голосов
/ 06 июля 2011

Я хочу обработать необработанные исключения в моем приложении ASP.NET MVC 3, чтобы я мог сообщить об ошибке пользователю через представление ошибок приложения.Как перехватить неисследованные исключения?Я хотел бы быть в состоянии сделать это глобально, а не для каждого контроллера (хотя я бы не против знать, как это сделать).

Ответы [ 5 ]

19 голосов
/ 06 июля 2011

Вы можете установить глобальный фильтр ошибок в Global.asax

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

. Вышеприведенное описание устанавливает обработчик ошибок по умолчанию, который направляет все исключения в стандартный просмотр ошибок.Представление об ошибках набирается для объекта модели System.Web.Mvc.HandleErrorInfo, который предоставляет сведения об исключении.

Вам также нужно включить пользовательские ошибки в файле web.config, чтобы увидеть это на локальном компьютере.

<customErrors mode="On"/>

Вы также можете определить несколько фильтров для определенных типов ошибок:

filters.Add(new HandleErrorAttribute
{
    ExceptionType = typeof(SqlException),
    View = "DatabaseError",
    Order = 1
});

/* ...other error type handlers here */

filters.Add(new HandleErrorAttribute()); // default handler

Обратите внимание, что HandleErrorAttribute будет обрабатывать только ошибки, которые происходят внутри конвейера MVC (то есть 500 ошибок).

10 голосов
/ 06 июля 2011

вы можете использовать фильтры HandleErrorAttribute,

[ErrorHandler(ExceptionType = typeof(Exception), View = "UnhandledError", Order = 1)]
 public abstract class BaseController : Controller

        {
    }

в основном вы можете иметь это поверх базового контроллера и определить UnhandledError.cshtml в папке Shared views.

И если вы хотите записать необработанные ошибки перед тем, как отобразить сообщение об ошибке, вы можете расширить класс HandleErrorAttribute и поместить логику для ведения журнала в метод OnException.

public class MyErrorHandlerAttribute : HandleErrorAttribute
    {


        public override void OnException(ExceptionContext exceptionContext)
        {
            Logger.Error(exceptionContext.Exception.Message,exceptionContext.Exception);
            base.OnException(exceptionContext);
        }
    }
4 голосов
/ 06 июля 2011

Для полноты картины в Global.asax также есть обработчик Application_Error.

3 голосов
/ 12 декабря 2012

Глобальная обработка ошибок

  1. Добавить в web.config

    <customErrors mode="On"/>
  2. Ошибка будет отображаться в Error.cshtml, который находится в общем папка

  3. Изменение в Error.cshtml
    @model System.Web.Mvc.HandleErrorInfo

    @{
        ViewBag.Title = "Error"; }


    <h2>
        <p>Sorry, an error occurred while processing your request.</p>
        <p>Controller Name: @Model.ControllerName</p>
        <p>Action Name : @Model.ActionName</p>
        <p>Message: @Model.Exception.Message</p> </h2>

2 голосов
/ 10 июля 2012

, чтобы сделать эту работу, я следовал за следующим сообщением в блоге , а затем сделал следующее дополнение к обоим файлам Web.config (корневому и тому, что находится в папке Views) внутри <system.web>узел:

  ...
  <system.web>
    <customErrors mode="On"/>
    ...

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...