Фильтр действий авторизации ASP.Net MVC - PullRequest
10 голосов
/ 29 января 2009

Я пытаюсь понять, как работает обработка ошибок при использовании фильтра действий Authorize [Authorize] в MVC Preview 4.

У меня есть действие, которое выглядит так:

[Authorize(Roles = "DOMAIN\\NOTAUTHORISED_ROLE" )]
[HandleError]
public ActionResult NeedAuthorisation()
{
    throw new NotImplementedException();
}

Когда я захожу на URL: http://localhost:2197/testAuthorisation/NeedAuthorisation, в моем браузере появляется пустая страница. В Firebug я вижу, что был сделан запрос и возвращен статус ответа 401 - Unauthorised. Но я не перенаправлен или не возвращаю customError. При использовании роли, для которой у меня есть права доступа, все работает как положено.

Используется проверка подлинности Windows. Я нахожусь в процессе написания кода для проверки подлинности с помощью форм, чтобы узнать, не возникла ли такая же проблема. Я установил <customerrors mode="On"/> и создал страницы ошибок, как в папке testAuthorisation, так и в папке Shared.

Ответы [ 3 ]

11 голосов
/ 29 января 2009

В конце концов я нашел этот учебник MVC , который решил мою проблему:

Что именно происходит, когда вы пытаетесь вызвать действие контроллера без правильных разрешений зависит от типа аутентификация включена. По умолчанию при использовании ASP.NET Development Сервер, вы просто получаете пустую страницу. Страница обслуживается 401 Not Статус авторизованного ответа HTTP.

0 голосов
/ 29 января 2009

Вам необходим просмотр ошибок в соответствующей папке просмотра, т. Е. Вам нужен файл Views/TestAuthorization/Error.aspx, чтобы что-либо отображалось.

Вы также можете настроить это поведение в зависимости от того, какое представление вы хотите использовать, и с каким исключением вы хотите, чтобы оно вызывалось.

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]]
0 голосов
/ 29 января 2009

Если для CustomErrors установлено значение Off или RemoteOnly, вы не будете перенаправлены на страницу, указанную в HandleError (по умолчанию Error.aspx). Установите значение «Вкл.» И посмотрите, что произойдет. Любые пользовательские страницы ошибок, которые вы укажете явным образом, будут иметь приоритет, поэтому вам нужно удалить их и просто:

<customErrors mode="On" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...