2010-11-22 103 views
6

我有一个ASP.NET MVC应用程序,并使用窗体身份验证。当转到需要认证的页面时,意味着控制器操作上有一个[Authorize]属性,它会将用户重定向到登录页面,并返回url,如http://localhost/Login?ReturnUrl=/MyAuthorizedUrlFormsAuthentication.GetRedirectUrl总是返回默认

这是我的配置是如何设置:

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

这是我应得的重定向URL:

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

这总是返回默认网址。

这是什么造成的?

回答

7

我假设您想通过FormsAuthentication.GetRedirectUrl得到“MyAuthorizedUrl”?

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

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

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

5

如果你的登录表单:

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

替换“登录”与您的操作名称和“帐户”与您的控制器名称。