我有一个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 );
这总是返回默认网址。
造成这种情况的原因是什么?
答案 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
))
将“登录”替换为您的操作名称,将“帐户”替换为您的控制器名称。