Я работаю над своим проектом ASP.NET MVC 2. Я создаю фильтр исключений для исключения неавторизованного доступа, которые возникают, когда пользователь не имеет разрешения на просмотр какого-либо действия.
[CustomError(typeof(UnauthorizedAccessException), "Error", "UnauthorizedAccess")]
public class MyController : BaseController
{
}
После того, как выбрано исключение, мой фильтр перейдет к сконфигурированному контроллеру/действию, который является следующим методом.
public ActionResult UnauthorizedAccess(ExceptionContext context)
{
Response.StatusCode = CustomHttpStatusCode.UnauthorizedUser;
return View(model);
}
Наконец, перед тем как приложение ASP.NET завершит этот запрос, он вызовет следующий метод, который находится в Global.ascx для изменения пользовательского кода состояния HTTP на статус HTTP 401 (несанкционированный доступ).
public void Application_EndRequest(object sender, EventArgs e)
{
if (Response.StatusCode == CustomHttpStatusCode.UnauthorizedUser)
{
Response.StatusCode = 401;
}
}
Все работает отлично на моей машине (IIS 7.5). Но он не работает на моем веб-сайте развертывания. Он по-прежнему возвращает обычный текст "У вас нет разрешения на просмотр этого каталога или страницы". вместо моей пользовательской страницы ошибок.
PS. Следующая конфигурация - это мой текущий файл web.config для этого случая.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="On"></customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="502" subStatusCode="-1" />
<remove statusCode="501" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="412" subStatusCode="-1" />
<remove statusCode="406" subStatusCode="-1" />
<remove statusCode="405" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="401" subStatusCode="-1" />
</httpErrors>
</system.webServer>
</configuration>