Я реализовал обработку ошибок в ASP.NET MVC-сайте таким образом, как предлагает этот пост.
С 404 ошибками все работает нормально. Но как правильно показать удобный экран для 401 ошибки? Обычно они не выбрасывают исключение, которое можно обрабатывать внутри Application_Error()
, но скорее действие возвращает HttpUnauthorizedResult. Один из возможных способов - добавить следующий код в конец метода Application_EndRequest()
if (Context.Response.StatusCode == 401)
{
throw new HttpException(401, "You are not authorised");
// or UserFriendlyErrorRedirect(new HttpException(401, "You are not authorised")), witout exception
}
Но внутри Application_EndRequest()
Context.Session == null, errorController.Execute()
терпит неудачу, потому что он не может использовать стандартный TempDataProvider.
// Call target Controller and pass the routeData.
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData)); // Additional information: The SessionStateTempDataProvider requires SessionState to be enabled.
Итак, можете ли вы предложить несколько рекомендаций по использованию "удобного для пользователя дескриптора" 401 в приложении ASP.NET MVC?
Спасибо.