FormsAuthentication.GetRedirectUrl总是返回默认
问题描述:
我有一个ASP.NET MVC应用程序,并使用窗体身份验证。当转到需要认证的页面时,意味着控制器操作上有一个[Authorize]属性,它会将用户重定向到登录页面,并返回url,如http://localhost/Login?ReturnUrl=/MyAuthorizedUrl
。FormsAuthentication.GetRedirectUrl总是返回默认
这是我的配置是如何设置:
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2880" defaultUrl="~/" />
</authentication>
这是我应得的重定向URL:
var url = FormsAuthentication.GetRedirectUrl(model.Email, model.RememberMe);
这总是返回默认网址。
这是什么造成的?
答
我假设您想通过FormsAuthentication.GetRedirectUrl
得到“MyAuthorizedUrl”?
您需要插入一个隐藏的输入字段,该字段镜像为ReturnUrl=/MyAuthorizedUrl
,例如, name="ReturnUrl" value="/MyAuthorizedUrl"
。
原因是登录页面是通过GET请求ReturnUrl
,但邮政去/Login
(没有任何参数)。
或者更改表单动作属性以包含ReturnUrl
参数。
答
如果你的登录表单:
@using (Html.BeginForm
(
"Login",
"Account",
new { ReturnUrl = Request.QueryString["ReturnUrl"] },
FormMethod.Post
))
替换“登录”与您的操作名称和“帐户”与您的控制器名称。