在ASP.NET中使用C#接受URL编码的POST请求

时间:2012-01-18 18:24:53

标签: c# post cgi

我正在与想要通过网址编码的帖子请求发送信息的第三方合作,我似乎无法弄清楚如何在发送请求时接受数据。

这是他们的服务器日志在提交请求后所说的内容(进行了一些更改以获取我的地址和他们发送的信息):

[13-01-12 14:52:55][DEBUG]: >> "POST /mypostpage.aspx HTTP/1.1[\r][\n]"
[13-01-12 14:52:55][DEBUG]: >> "User-Agent: Jakarta Commons-HttpClient/3.0.1[\r][\n]"
[13-01-12 14:52:55][DEBUG]: >> "Host: mydomain.com[\r][\n]"
[13-01-12 14:52:55][DEBUG]: >> "Content-Length: 1034[\r][\n]"
[13-01-12 14:52:55][DEBUG]: >> "Content-Type: application/x-www-form-urlencoded[\r]   [\n]"
[13-01-12 14:52:55][DEBUG]: >> "[\r][\n]"
[13-01-12 14:52:55][DEBUG]: >>     "Variable1=variable1value&variable2=variable2value&variable3=variable3value"
[13-01-12 14:53:02][DEBUG]: << "HTTP/1.1 200 OK[\r][\n]"

要获取他们发送的数据,我一直在尝试使用Request.QueryString。因此,要获得变量1的值,我可能会写出类似的内容:

variable1 = Request.QueryString [“variable1”];

我确信我错过了一些明显的东西,但我无法找到答案,说明为什么这个问题没有奏效。当我自己测试它时工作正常,但是当他们提交请求时,它根本不起作用,请求就好像没有任何东西一样。

2 个答案:

答案 0 :(得分:4)

Request.QueryString从请求的URI中提取查询字符串变量,这些变量通常使用application / x-www-form-urlencoded方案进行编码。查询字符串参数不会获得POSTed信息。

虽然上面POSTed数据的内容类型使用与查询字符串变量相同的方案,但为了访问它们,您需要使用variable1 = Request.Form["variable1"];或者variable1 = Request.Params["variable1"];,其中包含累积集合发布的值,查询字符串参数,cookie和服务器变量。

供参考:Request.ParamsRequest.Form

POST和GET请求在概念上是不同的,即使具有application / x-www-form-urlencoded变量的POST请求的格式与使用相同方案格式化的查询字符串参数的GET请求相同;因此,在HttpRequest类中分离访问方法。

编辑:

HttpRequest.Form和HttpRequest.Params属性返回NameValueCollection,它将字符串值与基于字符串的键相关联,因此所有值都是字符串。

答案 1 :(得分:0)

string variable1 = Request.Form["variable1"];

他们使用的内容类型是HTML表单与method="post"一起使用的两种格式之一,事实上两者中更为常见,Request.Form解析这两种格式。

事实上,内容类型可能被选中,以便在交易结束时让人们轻松生活。