C # MVC: Как переопределить настроенное перенаправление аутентификации? - PullRequest
8 голосов
/ 02 апреля 2011

У меня есть приложение MVC со следующим блоком внутри в Web.config:

<authentication mode="Forms">
    <forms loginUrl="~/Login" timeout="2880" />
</authentication>

Итак, если пользователь запрашивает страницу и авторизация не проходит, они будут перенаправлены в ~ / Login.

Это нормально, и мне это нужно для большинства моих контроллеров.Однако у меня есть контроллер, с которым я бы хотел обойти это правило.Как я могу позволить определенным контроллерам игнорировать это правило?

Моя проблема в том, что в моем приложении MVC (у которого есть несколько контроллеров) у меня есть определенный контроллер, на котором размещен интерфейс REST (не предназначенный для использования браузером).Поскольку этот контроллер не предназначен для использования браузером, я не хочу, чтобы он отправлял обратно всю страницу входа в систему (или любую страницу вообще, только строки или частичные просмотры.)

Обратите внимание, что яс помощью пользовательских атрибутов [Authorize ...] в моих действиях, и когда ЭТИ Сбой, они перенаправляют на действие Error - но, к сожалению, мое действие Error (которое возвращает короткую строку) перенаправляется на страницу входа из-за этой настройки конфигурации!

У меня кружится голова, когда я пытаюсь это понять, что я делаю не так?Я могу предоставить более подробную информацию, если это необходимо.

Ответы [ 3 ]

11 голосов
/ 02 апреля 2011

Вы можете расширить класс AuthorizeAttribute и переопределить HandleUnauthorizedRequest. Возможно, вы захотите вернуть запрещенный http-код состояния, а не пользовательское сообщение.

2 голосов
/ 02 апреля 2011

Добавьте следующий элемент после элемента system.web в Web.config:

<location path="home">
<system.web>
    <authorization>
        <allow users="*" />
    </authorization>
</system.web>
</location>

Это позволит неаутентифицированным пользователям получить доступ к «/ home» и, следовательно, к любым действиям на HomeController.

0 голосов
/ 16 февраля 2012

У Фила Хаака есть довольно подробное сообщение в блоге на эту тему: Запретить перенаправление страницы авторизации с помощью форм, когда вы этого не хотите

...