Метод formsauthentication.GetRedirectUrl всегда возвращает значение по умолчанию

у меня есть ASP.NET MVC app и я использую формы auth. При переходе на страницу, которая требует аутентификации, то есть есть атрибут [Authorize] в действии контроллера, он перенаправляет пользователя на страницу входа с возвращаемым url-адресом, таким как http://localhost/Login?ReturnUrl=/MyAuthorizedUrl.

вот как настраивается моя конфигурация:

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

вот как я получаю url-адрес перенаправления:

var url = FormsAuthentication.GetRedirectUrl( model.Email, model.RememberMe );

это всегда возвращает URL-адрес по умолчанию.

что вызывает это?

2 ответов


Я предполагаю, что вы хотели бы получить "MyAuthorizedUrl" в результате FormsAuthentication.GetRedirectUrl?

вам нужно вставить скрытое поле ввода, которое отражает ReturnUrl=/MyAuthorizedUrl, например,name="ReturnUrl" value="/MyAuthorizedUrl".

причина в том, что страница входа запрашивается через GET с помощью ReturnUrl, но почта идет в /Login (без параметров).

альтернативно измените атрибут действия формы, чтобы включить


Если ваша форма входа:

@using (Html.BeginForm
(
     "Login", 
     "Account", 
     new { ReturnUrl = Request.QueryString["ReturnUrl"] },
     FormMethod.Post
))

замените " Login "на имя действия и" Account " на имя контроллера.