我正在尝试将大量数据发送到HTTP处理程序。由于URL长度限制,我无法使用GET发送它,因此我决定将其POST。问题是我无法达到价值观。 context.Request.Form显示它有0个项目。那么有没有办法将数据发布到HttpHandler?
答案 0 :(得分: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
}
答案 1 :(得分:2)
我遇到了同样的问题,并最终发现将内容类型设置为“json”是个问题......
contentType: "application/json; charset=utf-8"
这是一些流行的教程建议你在$ ajax调用中添加的一行,并且与ASPx WebServices配合得很好,但由于某些原因它不适用于使用POST的HttpHandler。
很难捕捉,因为查询字符串中的值工作正常(在Web中看到的另一种技术,尽管使用POST没有多大意义)。
答案 2 :(得分:2)
我也有同样的问题。这是客户端/ AJAX问题。我必须将AJAX调用请求标头“ContentType”设置为
application/x-www-form-urlencoded
让它发挥作用。
答案 3 :(得分:1)
您要发送到HTTP处理程序的POST数据必须采用查询字符串格式a=b&c=d
。您可以使用Request["a"]
(将返回b
)在服务器端检索它,依此类推。
答案 4 :(得分:1)
面临类似的问题。纠正所有问题之后,我在web.config
中又遗漏了一件事 - 将动词更改为*
或GET,POST
。之后一切正常。
<httpHandlers>
...
<add verb="*" path="test.ashx" type="Handlers.TestHandler"/>
</httpHandlers>
答案 5 :(得分:1)
POST字段包含在
中HttpContext.Request.Params
要检索它们,您可以使用
var field = HttpContext.Request.Params["fieldName"];