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

C# 我可以在GET请求中访问querystring变量,但不能在POST中访问,c#,asp.net,asp.net-mvc,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(FormCo

如果我尝试访问一个带有检查身份验证的过滤器的网页,当我匿名冲浪时,它会重定向到登录页面。因此,URL可能如下所示:

www.example.com/user/login?ReturnUrl=/user/settings
我的登录操作有两种方法,一种用于GET,另一种用于POST请求类型

[AcceptVerbs("GET")
public ActionResult Login()
{
}
[AcceptVerbs("POST")
public ActionResult Login(FormCollection f)
{
}
获取和登录后操作中都包含以下代码:

 string redirectUrl = "";

 if(Request.QueryString["ReturnUrl"] != null)
 {
  redirectUrl = Request.QueryString["ReturnUrl"];
 }
在调试模式下,变量在GET操作中正确初始化,但在POST操作中它只是跳过调用,这意味着它为NULL


为什么会这样?返回url在url中仍然可见?

如果是POST请求,请检查
请求。表单[“返回url”]
属性

在这里查看HttpContext.request对象

GET或POST请求中都返回了大量有用的信息


将查询字符串参数与POST混合在一起在技术上是不符合RFC的,您应该做一个或另一个,但不能同时做两个。(我已经说过,我没有遇到过不允许这种情况的浏览器/web服务器)


如果您想“正确”地执行此操作,您可以将ReturnUrl作为表单上的隐藏输入字段,并在服务器上与其他表单变量一起检索它。

我无法重新创建此行为。您的表单操作url确实包含返回url,对吗?不,它没有,表单正在发布到/user/loginWell,这就是您的问题!你需要它来发布到完整的url,包括querystring,例如,为什么不将发布的签名更改为:public ActionResult Login(FormCollection f,string ReturnUrl)你能定位到该RFC吗?据我所知,查询只是传递给资源的进一步数据。