Атрибут ASP.NET MVC Beta Authorize отправляет меня на неверное действие - PullRequest
16 голосов
/ 07 октября 2010

Сегодня я начал играть с MVC 3 Beta. Запустили приложение из шаблона MVC 3 по умолчанию, добавили новое действие в домашний контроллер следующим образом (с учетом этого)

[Authorize]
public ActionResult Secured()
{
    ViewModel.Message = "This is secured area, only authenticated users should be here.";
    return View();
}

Теперь, когда я пытаюсь перейти к защищенному действию, я получаю сообщение об ошибке 404 страница не найдена.

Вот раздел аутентификации из моего web.config.

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

Если я правильно понял, атрибут Authorize должен привести к неавторизованному HTTP-ответу 401, который должен быть перехвачен обработчиком аутентификации и перенаправить меня на loginUrl. Что должно привести к действию учетной записи / входа.

Мое приложение MVC 2 работает должным образом и переносит меня в действие Account / LogOn, я что-то упустил? или это ошибка в бета-версии MVC 3?

Ответы [ 4 ]

15 голосов
/ 18 февраля 2011

Он больше не работает с окончательной первоначальной версией

Вам необходимо добавить

<add key="loginUrl" value="~/Account/LogOn" />

в настройки приложения в Web.Config

Проблемы вConfigUtil в WebMatrix.WebData

private static string GetLoginUrl()
{

    return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}



staticFormsAuthenticationSettings()
{
    LoginUrlKey = "loginUrl";
    DefaultLoginUrl = "~/Account/Login";
}
10 голосов
/ 07 октября 2010

ScottGu отвечает на аналогичный вопрос в своем блоге , что это, по-видимому, ошибка.

Обходной путь - добавить эту запись:

<add key="autoFormsAuthentication" value="false" />

к вашему<appSettings /> в корневом файле веб-приложения web.config.

2 голосов
/ 27 сентября 2011

После того как я удалил WebMatrix * .dll в каталоге bin, все в порядке.

0 голосов
/ 17 января 2012

MVC 4 демонстрирует ту же проблему. Однако на MVC 4, если режим аутентификации правильно установлен на = "Forms" в файле конфигурации, как показано ниже, проблема исчезает:

<authentication mode ="Forms">
    <forms loginurl = "your login" timeout ="2880" slidingExpiration="true">
</authentication>

Это работает для меня. Убери режим и он доставит тебе неприятности.

...