Подтвердить что ты не робот

Как обрабатывать исключенные исключения в приложении ASP.NET MVC 3?

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

4b9b3361

Ответ 1

Вы можете настроить глобальный фильтр ошибок в 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 ошибок).

Ответ 2

вы можете использовать фильтры 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);
        }
    }

Ответ 3

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

Ответ 4

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

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

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

  • Изменение в 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>

Ответ 5

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

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

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