Настройка пользовательского базового контроллера, на который наследуется HomeController (и все, что у вас есть). После этого вы можете обработки исключений установки в базовом контроллере:
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
base.OnException(filterContext);
return;
}
filterContext.ExceptionHandled = true;
if (filterContext.Exception is HttpException)
{
var statusCode = ((HttpException) filterContext.Exception).GetHttpCode();
Response.StatusCode = statusCode;
if (statusCode == (int) HttpStatusCode.NotFound)
{
filterContext.Result = View(ErrorController.Actions.NotFound);
}
else
{
filterContext.Result = View(ErrorController.Actions.InternalServerError);
}
}
else
{
Response.StatusCode = (int) HttpStatusCode.InternalServerError;
filterContext.Result = View(ErrorController.Actions.InternalServerError);
}
base.OnException(filterContext);
}
Конечно, вы будете нужны ваши собственные взгляды ErrorController и ошибок, а также.
Преимущество в том, что: a) у вас есть больший контроль над обработкой исключений, b) вы можете установить соответствующий код состояния HTTP, и c) вы можете выполнить модульный тест обработчика ошибок.
Свойство defaultRedirect customErrors будет работать так же, как и более базовый подход, однако вы не можете тестировать поведение, и пользователи затем подвергаются вашим ошибкам, а не остаются на текущем URI.
да, это работает. благодаря – jwdehaan