【问题标题】:Receiving a HTTP POST in HTTP Handler?在 HTTP 处理程序中接收 HTTP POST?
【发布时间】:2013-06-08 06:20:46
【问题描述】:

我需要在 HTTP 处理程序中侦听和处理 HTTP POST 字符串。

以下是将字符串发布到处理程序的代码 -

string test = "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4;
byte[] data = Encoding.UTF8.GetBytes(test);
PostData("http://localhost:53117/Handler.ashx", data);

我在 Handler 中尝试的是 -

    public void ProcessRequest(HttpContext context)
    {
        var value1 = context.Request["param1"];
    }

但它是空的。 Handler中如何监听和获取参数值?

【问题讨论】:

    标签: c# asp.net post http-post httphandler


    【解决方案1】:

    您似乎没有使用任何标准请求编码,而是您似乎在重新发明一些自定义协议,因此您不能依赖服务器 ASP.NET 来解析此请求。您必须直接从 InputStream 中读取值:

    public void ProcessRequest(HttpContext context)
    {
        using (var reader = new StreamReader(context.Request.InputStream))
        {
            // This will equal to "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4"
            string values = reader.ReadToEnd();
        }
    }
    

    另一方面,如果您使用一些标准的请求编码,例如application/x-www-form-urlencoded,您将能够像往常一样读取参数。

    这样的请求负载可能如下所示:

    POST /Handler.ashx HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 47
    Connection: close
    
    param1=val1&param2=val2&param3=val3&param4=val4
    

    为了发送这样的请求,您可以使用WebClient

    using (var client = new WebClient())
    {
        var values = new NameValueCollection
        {
            { "param1", "value1" },
            { "param2", "value2" },
            { "param3", "value3" },
            { "param4", "value4" },
        };
        byte[] result = client.UploadValues(values);
    }
    

    现在在服务器上你可以读取这样的值:

    public void ProcessRequest(HttpContext context)
    {
        var value1 = context.Request["param1"];
        var value2 = context.Request["param2"];
        ...
    }
    

    【讨论】:

    • 非常感谢!我将 AngularJS 用于前端图像大小调整功能,然后将一批(数组)JSON 对象(包含名称、尺寸、图像数据本身(base64)等)上传到服务器。我在读取有效负载时遇到问题(如果添加参数,则无法找到/读取服务器端的“数据:”(或者,不知道如何)。)所以使用 streamReader 现在可以正常工作了:) 谢谢: )
    • @Darin 请问你能帮我解决这个问题吗goo.gl/qiOdmT
    【解决方案2】:

    改变

        var value1 = context.Request["param1"];
    

        var value1 = context.Request.Form["param1"];
    

    【讨论】:

      【解决方案3】:

      其实是:

          context.Request.Params["param1"];
      

      【讨论】:

        猜你喜欢
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        • 1970-01-01
        相关资源
        最近更新 更多