2010-02-02 103 views
2

如果我尝试访问一个具有检查身份验证过滤器的网页,那么当我浏览匿名时,它会重定向到登录页面。因此,URL可能如下所示:我可以在GET请求上访问querystring变量,但不能访问POST

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在url中仍然可见?

+1

我无法重新创建此行为。你的表单动作url *包含了返回url,对吗? – 2010-02-02 20:05:12

+0

不,它没有,表格发布到/用户/登录 – Blankman 2010-02-02 20:14:16

+3

那么这就是你的问题!你需要它发布到完整的网址,包括查询字符串,例如。 <形式行动=“/用户/密码RETURNURL = /用户/设置?”方法=“邮报”> – 2010-02-02 20:16:59

回答

1

混合使用POST查询字符串参数在技术上是RFC兼容,你应该做一个或另一个,但不能同时使用。 (说过我没有遇到不允许的浏览器/网络服务器)。

如果你想“正确地”做到这一点,你需要将ReturnUrl作为表单上的隐藏输入字段,并将其与服务器上的其他表单变量一起检索。

+0

请问你能够站点的RFC,据我所知,查询只是进一步的数据传递给资源。 – 2010-02-05 15:30:42

0

在POST请求的情况下,检查Request.Form["returnUrl"]财产

相关问题