2012-01-18 37 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