Я хочу обрабатывать исключенные исключения в моем приложении ASP.NET MVC 3, чтобы я мог сообщить об ошибке пользователю через представление ошибки приложения. Как перехватить исключенные исключения? Я бы хотел сделать это глобально, а не для каждого контроллера (хотя я бы не прочь также знать, как это сделать).
Как обрабатывать исключенные исключения в приложении ASP.NET MVC 3?
Ответ 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"/>
...
Надеюсь, что это поможет...