MVC авторизовывают атрибут + HttpUnauthorizedResult + FormsAuthentication

После просмотра раздела MVC по CodePlex я заметил, что [Авторизовать] атрибут в MVC возвращает HttpUnauthorizedResult (), когда авторизация перестала работать (класс codeplex AuthorizeAttribute).

В источнике HttpUnauthorizedResult () от CodePlex код (мне не разрешают ввести другой URL, поскольку мой представитель не достаточно высок, но замените числа на URL выше с 22929#266476):

// 401 is the HTTP status code for unauthorized access - setting this
// will cause the active authentication module to execute its default
// unauthorized handler
context.HttpContext.Response.StatusCode = 401;

В частности, комментарий описывает несанкционированный обработчик модуля аутентификации по умолчанию.

Я, может казаться, не нахожу информации об этом несанкционированном обработчике по умолчанию. В частности, я не использую FormsAuthentication и когда авторизация перестала работать, я получаю ужасную ошибочную страницу IIS 401.

Кто-либо знает об этом несанкционированном обработчике по умолчанию, и в особенности как FormsAuthentication сцепляется в переопределить его?

Я пишу действительно простое приложение для своей футбольной команды, кто подтверждает или отклоняет, могут ли они сыграть особый матч. Если бы я включаю FormsAuthentication в web.config работы перенаправления, но я не использую FormsAuthentication, и я хотел бы знать, существует ли обходное решение.

7
задан tereško 25 February 2013 в 15:41
поделиться

1 ответ

Если у вас есть отражатель, посмотрите на System.Web.Security.formsauthenticationModule.init (). Этот метод подключает application_endrequest и вызовов onleave (). Метод ONLEAVE () проверяет, что код ответа является http 401. Если оно есть, то модуль выполняет перенаправление, а не пузыривать 401 до клиента. (Эта логика - это то, что комментарий ссылается на то, как «по умолчанию неавторизованный обработчик».) В вашем конкретном случае ASP.NET позволяет 401 Bubble подняться на клиента, но IIS перехватит его и отображает страницу с уродливой ошибкой.

Вы можете сделать что-то очень похожее из в Global.Asax. Сделайте метод Application_endRequest; Этот метод будет вызван в конце каждого запроса, обслуживаемого вашим приложением. Отсюда вы можете делать все, что вы хотите. Если вы хотите проверить, является ли ответ 401 и перенаправить их на другую страницу, вы можете сделать это отсюда.

11
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: