2009-05-26 80 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"];