如果我尝试访问具有检查身份验证的过滤器的网页,则在我匿名冲浪时会重定向到登录页面。因此URL可能如下所示:
www.example.com/user/login?ReturnUrl=/user/settings
我的登录操作有两种方法,分别用于GET和一种用于POST请求类型。
[AcceptVerbs("GET")
public ActionResult Login()
{
}
[AcceptVerbs("POST")
public ActionResult Login(FormCollection f)
{
}
以下代码同时出现在GET和POST登录操作中:
string redirectUrl = "";
if(Request.QueryString["ReturnUrl"] != null)
{
redirectUrl = Request.QueryString["ReturnUrl"];
}
在调试模式下,变量在GET操作中正确初始化,但在POST操作中它只是跳过调用,这意味着它是NULL。
这是为什么? ReturnUrl仍在网址中可见?
答案 0 :(得分:1)
将查询字符串参数与POST混合在技术上不符合RFC,你应该做一个或另一个,但不能两者兼而有之。 (说过我没有遇到过不允许这样做的浏览器/网络服务器。)
如果你想“正确”地执行它,你可以将ReturnUrl作为表单上的隐藏输入字段,并将其与服务器上的其他表单变量一起检索。
答案 1 :(得分:0)
如果是POST请求,请检查Request.Form["returnUrl"]
属性
答案 2 :(得分:0)
看一下HttpContext.Request对象。
GET或POST请求中提供了大量有用的信息。
http://msdn.microsoft.com/en-us/library/system.web.httprequest_members.aspx