FormsAuthentication.GetRedirectUrl始终返回默认值

Jos*_*ose 7 asp.net asp.net-mvc forms-authentication

我有一个ASP.NET MVC应用程序,我正在使用Forms身份验证.当转到需要身份验证的页面时,意味着控制器操作上有[Authorize]属性,它会将用户重定向到具有返回URL的登录页面http://localhost/Login?ReturnUrl=/MyAuthorizedUrl.

这是我的配置设置方式:

<authentication mode="Forms">
  <forms loginUrl="~/Login" timeout="2880" defaultUrl="~/" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

这就是我获取重定向网址的方式:

var url = FormsAuthentication.GetRedirectUrl( model.Email, model.RememberMe );
Run Code Online (Sandbox Code Playgroud)

这始终返回默认网址.

是什么造成的?

lig*_*t78 8

我假设你想得到"MyAuthorizedUrl"的结果FormsAuthentication.GetRedirectUrl

您需要插入一个镜像的隐藏输入字段ReturnUrl=/MyAuthorizedUrl,例如name="ReturnUrl" value="/MyAuthorizedUrl".

原因是登录页面是通过GET请求的ReturnUrl,但POST转到/Login(没有任何参数).

或者,更改表单操作属性以包含ReturnUrl参数.


Ale*_*lex 6

如果您的登录表格:

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

将"登录"替换为您的操作名称,将"帐户"替换为您的控制器名称.