我可以在GET请求上访问querystring变量,但不能访问POST

时间:2010-02-02 19:43:19

标签: c# asp.net asp.net-mvc

如果我尝试访问具有检查身份验证的过滤器的网页,则在我匿名冲浪时会重定向到登录页面。因此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仍在网址中可见?

3 个答案:

答案 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