Атрибут ASP.NET MVC Beta Authorize отправляет мне неправильное действие
Сегодня я начал играть с бета-версией MVC 3. Начав с приложения из шаблона 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. Это должно привести к действию Account/LogOn.
Приложение My MVC 2 работает так, как ожидалось, и возвращает меня в действие Account/LogOn, я что-то упускаю? или Это ошибка в MVC 3 beta?
Ответы
Ответ 1
ScottGu отвечает на аналогичный вопрос в своем блоге, что это, по-видимому, ошибка.
Обходной путь заключается в том, чтобы добавить эту запись:
<add key="autoFormsAuthentication" value="false" />
в раздел <appSettings
/" > в корневом файле web.config веб-приложения.
Ответ 2
Он больше не работает с RTM
Вам нужно добавить
<add key="loginUrl" value="~/Account/LogOn" />
в appSettings в Web.Config
Проблемы возникают в ConfigUtil в WebMatrix.WebDatap >
private static string GetLoginUrl()
{
return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}
staticFormsAuthenticationSettings()
{
LoginUrlKey = "loginUrl";
DefaultLoginUrl = "~/Account/Login";
}
Ответ 3
После удаления WebMatrix *.dll в каталоге bin все в порядке.
Ответ 4
MVC 4 демонстрирует ту же проблему. Однако на MVC 4, если режим аутентификации правильно установлен в = "Формы" в файле конфигурации, как и в следующем, проблема исчезает:
<authentication mode ="Forms">
<forms loginurl = "your login" timeout ="2880" slidingExpiration="true">
</authentication>
Это работает для меня. Выньте режим, и это дает вам неприятности.