2012-01-18 71 views
1

我与希望通过URL编码的POST请求发送信息,我似乎无法弄清楚如何接受数据,当他们发送请求第三方合作。接受URL编码POST请求与C#中的ASP.NET

这里提交申请(有做了一些修改,以把我的地址,他们发出的信息)后,什么他们的服务器日志说:

[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。因此,要获得变量值,我可能会写如下内容:

variable1 = Request.QueryString [“variable1”];

我确定我错过了一些明显的东西,但是我一直无法找到答案,为什么这一直没有奏效。当我自己测试它时,它可以正常工作,但是当它们提交请求时,它完全不起作用,请求就像没有任何东西一样。

+0

看起来他们给你的数据在http标题中,而不是在查询字符串中。检查WebHeaderCollection:http://msdn.microsoft.com/en-us/library/system.net.webheadercollection.aspx – 2012-01-18 18:29:58

+1

@TheSavage这不是标题,它是正文。事实上,由于查询字符串*在头部中是错误的。 – 2012-01-18 20:08:25

回答

4

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

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

参考:Request.ParamsRequest.Form

POST和GET请求是概念上不同,即使与应用程序/ x-WWW窗体-urlencoded变量POST请求是相同的格式,以与查询字符串参数的GET请求格式化采用相同的方案;因此在HttpRequest类中分离访问方法。

编辑:

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

+0

谢谢你,这正是我需要的。 – Chronos 2012-01-18 19:21:08

+0

@Chronos很高兴有帮助...也许你应该接受答案大声笑 – 2012-01-18 21:09:30

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

他们正在使用的内容类型是HTML形式与method="post"使用两种格式中的一个,更常见的两个实际上,以及Request.Form解析两者。

事实上,内容类型可能是采摘,使生活容易对人的交易结束。

+0

谢谢!这很有帮助。 – Chronos 2012-01-18 19:22:47