FormsAuthentication.GetRedirectUrl始终返回默认值

时间:2010-11-22 14:45:18

标签: asp.net asp.net-mvc forms-authentication

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

这是我的配置设置:

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

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

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

这总是返回默认网址。

造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:7)

我假设您希望FormsAuthentication.GetRedirectUrl获得“MyAuthorizedUrl”?

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

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

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

答案 1 :(得分:5)

如果您的登录表单:

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

将“登录”替换为您的操作名称,将“帐户”替换为您的控制器名称。