我的登录 View 中有这个网址:http://localhost:5550/login?ReturnUrl=/forum/456&theme=1
当我进入登录页面时,我得到了正确的 url 值。 正如你所看到的,我有 2 个查询字符串参数:ReturnUrl 和 theme 到目前为止还不错。
现在登录页面将表单发送到 Controller 操作。 我所需要的只是读取这两个查询字符串参数的值。 我就是无法让它发挥作用。
这是我的登录页面 View :
@using (Html.BeginForm("try", "login"))
{
//set text boxes and button so user can try login
}
这是我的 Controller ,我需要这两个值:
[HttpPost]
public ActionResult Try(LoginModel model, string ReturnUrl, string theme)
{
//read all query string param values...but how?
//I am not getting anything in string ReturnUrl, string theme. They are null
}
问题的其他部分:
我可以调试其他 Controller 。但不是这个 Controller 。 这是因为我使用 BeginForm 发布表单吗? 没有道理。但即使我在浏览器上收到错误,断点也永远不会命中。
最佳答案
通常您不应该从 ReturnUrl 读取内容。流程如下:
- 请求 Controller 操作,需要使用 [Authorize] 属性进行身份验证
- ASP.NET MVC 添加 ReturnUrl 并重定向到/Account/LogOn,自动编码并附加 ReturnUrl 参数
- Account/LogOn POST Controller 操作在验证登录信息后,会重定向到 ReturnUrl 中的 URL。
我在以下帖子中详细描述了这一点:
- Looking at how the ASP.NET MVC Authorize interacts with ASP.NET Forms Authorization
- Preventing Open Redirection Attacks in ASP.NET MVC
第二篇文章指出了需要小心 ReturnUrl 的一个很好的理由 - 用户可以篡改它们。
在上面显示的示例中,我希望在授权后,用户将被重定向到论坛/索引操作,然后该操作将读取值。如果您要创建 ReturnUrl,则应该对第二个 & 进行 URL 编码。
关于asp.net-mvc-3 - 需要 MVC 3 LoginPage 中 ReturnUrl 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448939/