c# - 在 HTTP 处理程序中接收 HTTP POST?

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

我需要在 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中的参数值?

最佳答案

您似乎没有使用任何标准请求编码,相反您似乎正在重新发明一些自定义协议(protocol),因此您不能依赖服务器 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"];
    ...
}

关于c# - 在 HTTP 处理程序中接收 HTTP POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996713/

相关文章:

c# - 同一应用程序中的多个静态变量范围?

c# - 与 ASP.net 中的 GridView 相关的问题

c# - Web 应用程序中的确认消息框

java - Android studio中POST请求示例

JAVA:无法从 401 读取正文

php - 仅使用 PHP 提交表单?没有 JavaScript?

C#:什么破坏了我的 NativeWindow 对象,为什么?

c# - 如何从 EF Core 中的模型生成类图?

c# - WCF 不在消息中发送类型提示

c# - 从字符串公式映射变量