我需要在 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¶m2=val2¶m3=val3¶m4=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/