Подтвердить что ты не робот

Проблема 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". Почему?

4b9b3361

Ответ 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 Beta​​strong > . Из известных проблем:

"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