Я работаю над проектом ASP.NET MVC 2.Я создаю фильтр исключений для перехвата исключения неавторизованного доступа, которое возникает, когда у пользователя нет разрешения на просмотр какого-либо действия.
[CustomError(typeof(UnauthorizedAccessException), "Error", "UnauthorizedAccess")]
public class MyController : BaseController
{
}
После создания исключения мой фильтр перейдет к настроенному контроллеру / действию, которое являетсяmethod.
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>