Проблема ASP.NET MVC с конфигурацией раздела проверки подлинности форм
У меня есть приложение ASP.NET MVC 3 Beta, работающее на IIS. В моем web.config
я определил следующий раздел, отвечающий за проверку подлинности форм:
<authentication mode="Forms">
<forms
loginUrl="~/Account/LogOn"
name=".VNK"
protection="All"
timeout="43200"
cookieless="UseCookies" />
</authentication>
Определенный адрес входа ~/Account/LogOn
.
Когда я пытаюсь получить URL-адрес для входа, используя:
FormsAuthentication.Initialize();
string loginUrl = FormsAuthentication.LoginUrl;
Получаю: /VNK/site/Account/Login
Почему я получаю другой адрес от имени, определенного в web.config
?
UPDATE. Префикс "/VNK/сайт/" не. Проблема в том, что свойство LoginUrl
класса FormsAuthentication
не отражает значение из web.config. Это означает, что если я изменю значение атрибута LoginUrl
в файле web.config из "~/Account/LogOn", например, "~/foobar", FormsAuthentication.LoginUrl
по-прежнему имеет значение "/VNK/site/Account/Login". Почему?
Ответы
Ответ 1
Я думаю, что есть ошибка в ASP.NET MVC 3 Beta. Эта проблема не появляется в предыдущих выпусках ASP.NET MVC.
Если кто-то хочет воспроизвести эту ошибку, он должен следовать этому:
1. Загрузите mvc framevork.
2.Создание нового веб-приложения ASP.NET MVC 3
3.Applay Authorize
атрибут About
action в HomeController
[Authorize]
public ActionResult About()
{
return View();
}
4. Запустите приложение и вызовите действие О, нажав вкладку О. Вы получите ошибку сервера, потому что приложение пытается перенаправить вас на такой URL:
http://localhost:[port_num]/Account/Login?ReturnUrl=%2fHome%2fAbout
Очевидно, нет представления Вход. Существует LogOn. Действие Url to LogOn определяется в нетронутом файле web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Но приложение не отражает этого. Кто-нибудь знает, что происходит?
UPDATE:
Я был прав, есть ошибка в MVC 3 Betastrong > . Из известных проблем:
"Theres известная проблема, которая заставляет Authentication Forms всегда перенаправлять неавторизованных пользователей в /Account/Login, игнорируя параметры проверки подлинности форм, используемые в Web.config. Обходным путем является добавление следующей настройки приложения.
<add key="autoFormsAuthentication" value="false" />
ОБНОВЛЕНИЕ 2:
Александр Прокофьев заметил, что ASP.NET 3 RTM ищет другую настройку. Поэтому вам нужна эта строка:
<add key="loginUrl" value="~/LogOn" />
Ответ 2
Если у вас есть доступ к IIS, добавьте новое приложение и включите "интегрированную конвейерную обработку" ASP.NET в разделе пула приложений, дважды щелкнув его.
Если ваш хостинг-провайдер не предоставляет вам доступ к IIS,
затем войдите в панель управления.
- Перейдите на веб-сайты, на вкладке "Управление" включите ASP.NET
подкладка трубы.
- Установите приложение как виртуальный каталог
(Это сработало для меня)
Ответ 3
Таким образом, простым решением было удалить WebMatrix. *. dll из папки Bin в веб-проекте. Я сделал это для моего проекта asp.net, так как он перенаправлял мой логин в URL-адрес mvc.
Ответ 4
Обновленный ответ для MVC 4, сильно заимствованный из этой страницы, и Запросить перенаправление на /Account/Login? ReturnUrl =% 2f с момента установки MVC 3 на сервере
<appSettings>
...
<add key="PreserveLoginUrl" value="true" />
</appSettings>
...
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="43200" /> <!--43,200 in minutes - 30 days-->
</authentication>
Ответ 5
Добавьте в appSettings следующее:
<add key="loginUrl" value="~/Account/LogOn" />
Вы можете удалить loginUrl из конфигурации проверки подлинности формы.
Ответ 6
Я удалил следующее из моего web.config
<remove name="FormsAuthentication" />
и тогда все, казалось, сработало. Этот текст был добавлен по умолчанию, когда я создал свой проект.
Ответ 7
Тильда (~) означает "корень моего веб-сайта", поэтому вам не нужно продолжать использовать ..
или \
для увеличения и уменьшения структуры веб-сайта. Однако с точки зрения IIS у веб-приложения может быть дополнительный уровень структуры каталогов, который отражается при запросе LoginUrl
программно. Я не уверен, почему вы хотите получить LoginUrl, нормальное состояние дел приведет к тому, что IIS автоматически перенаправит пользователя на LoginUrl в любое время, когда они попытаются получить доступ к странице, на которую они не прошли аутентификацию.
Ответ 8
Я думаю, что сервер не может решить, что означает ~ в этом случае, попробуйте указать более прямой URL-адрес на странице входа, например /Account/LogOn.
Может быть, вы найдете здесь что-то полезное http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx