【问题标题】:How to POST data to ASP.NET HttpHandler?如何将数据发布到 ASP.NET HttpHandler?
【发布时间】:2009-05-26 05:03:26
【问题描述】:

我正在尝试将大量数据发送到 HTTP 处理程序。由于 URL 长度限制,我无法使用 GET 发送它,所以我决定改为发布它。问题是我无法理解这些值。 context.Request.Form 显示它有 0 个项目。那么有没有办法可以将数据 POST 到 HttpHandler?

【问题讨论】:

  • 你用什么来发出请求? HttpWebRequest?
  • 我正在使用 Jquery 进行 Ajax 调用
  • 您能否提供一个代码示例来说明您在请求端所做的工作?
  • 我以为您使用的是没有任何包装器的纯 Ajax。如果您使用的是 jQuery,那么您将使用 Request 集合获取 POST 参数的值。顺便说一句,我告诉以查询字符串格式发布数据,而不是作为查询字符串。
  • 好的,我会试试的,虽然我不是很有希望:)

标签: asp.net ajax httphandler


【解决方案1】:

查看一些代码有助于诊断问题。你有没有尝试过这样的事情?

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】:

    我也遇到了同样的问题。这是一个客户端/AJAX 问题。我必须将 AJAX 调用请求标头“ContentType”设置为

    application/x-www-form-urlencoded
    

    让它工作。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,最终发现将内容类型设置为“json”是问题...

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

      这是一些流行教程建议您在 $ajax 调用中添加的一行,并且可以很好地与 ASPx WebServices 配合使用,但由于某种原因,它不适用于使用 POST 的 HttpHandler。

      很难捕捉,因为查询字符串中的值工作正常(另一种在网络上看到的技术,尽管为此使用 POST 没有多大意义)。

      【讨论】:

        【解决方案4】:

        您发送到 HTTP 处理程序的 POST 数据必须是查询字符串格式 a=b&c=d。您可以在服务器端使用Request["a"] 检索它(将返回b),依此类推。

        【讨论】:

        • 对不起,我不明白。如果我在 Querystring :S 中发送数据,将如何发布数据。你能解释一下你的建议吗?如果您说我应该创建一个查询字符串并将其附加到我的 URL,那么由于 URL 长度限制,这将不起作用。
        • 我认为他的意思是对数据进行 URL 编码,由 & 分隔,就像在查询字符串中一样,除了在请求正文中,而不是在 URL 中。 jQuery 应该会自动为您处理。
        【解决方案5】:

        面临类似的问题。在纠正了所有问题之后,我在web.config 中又错过了一件事情——将动词更改为*GET,POST。之后一切正常。

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

        【讨论】:

          【解决方案6】:

          POST 字段包含在

          HttpContext.Request.Params
          

          要检索它们,您可以使用

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-25
            相关资源
            最近更新 更多