2009-05-26 125 views
13

我正在嘗試將大塊數據發送到HTTP處理程序。由於URL長度限制,我無法使用GET發送它,所以我決定改爲POST。問題是我無法理解價值觀。 context.Request.Form顯示它有0個項目。那麼有沒有辦法可以將數據發佈到HttpHandler?如何將數據發佈到ASP.NET HttpHandler?

+0

? HttpWebRequest的? – 2009-05-26 05:31:49

+0

我正在使用Jquery進行Ajax調用 – 2009-05-26 05:56:24

回答

1

您發送到HTTP處理程序的POST數據必須採用查詢字符串格式a=b&c=d。並且您可以使用Request["a"](將返回b)在服務器端檢索它,依此類推。

11

有一些代碼可以幫助診斷問題。你有沒有嘗試過這樣的事情?

jQuery代碼:

$.post('test.ashx', 
     {key1: 'value1', key2: 'value2'}, 
     function(){alert('Complete!');}); 

然後在您的ProcessRequest()方法,你應該能夠做到:

string key1 = context.Request.Form["key1"]; 

您也可以在的ProcessRequest檢查請求的類型()方法來調試問題。

if(context.Request.RequestType == "POST") 
{ 
    // Request should have been sent successfully 
} 
else 
{ 
    // Request was sent incorrectly somehow 
} 
2

我有同樣的問題,並最終想通了,設置的內容類型爲「JSON」是問題...

contentType: "application/json; charset=utf-8" 

這是一個行一些熱門教程建議你添加在$ ajax調用中,並且與ASPx WebServices協同工作,但由於某些原因,它不適用於使用POST的HttpHandler。

難以捕捉,因爲查詢字符串中的值工作正常(在網絡中看到的另一種技術,儘管使用POST並沒有多大意義)。

2

我也有同樣的問題。這是一個客戶/ AJAX問題。我必須將AJAX呼叫請求標頭「ContentType」設置爲

application/x-www-form-urlencoded 

使其工作。

1

面臨類似的問題。在糾正了所有問題之後,還有一件事我錯過了web.config - 將動詞改爲*GET,POST。之後,一切正常。

<httpHandlers> 
    ... 
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/> 
</httpHandlers> 
1

POST字段包含在

HttpContext.Request.Params 

要獲取他們,你可以你在使用發出請求使用

var field = HttpContext.Request.Params["fieldName"];