我正在设计一个负责与硬件通信的Web界面。硬件联系网页并使用POST发送HTTP请求,该请求使用“key = value”格式包含http包正文中的特定数据。
服务器端我的代码执行以下操作:
public override void ProcessRequest(HttpContext curContext)
{
if (curContext != null)
{
HttpResponse response = curContext.Response;
response.Clear();
response.ContentType = "text/plain";
response.BufferOutput = true;
response.StatusCode = 200; // HttpStatusCode.OK;
response.Write(response.StatusCode.ToString());
response.End();
}
}
但我真正需要的是检查Body并检索数据(文本/纯文本格式)的必要代码。我对这种类型的Web编程相当新,所以我不知道要在curContext中编写什么代码来获取这些信息,或者我的覆盖方法是否正确。
我期待有像curContext.Request.Body这样的东西,但事实并非如此。如何在请求正文中查看原始POST数据?有人能指出我正确的方向吗?
由于
答案 0 :(得分:2)
您希望使用传递给ProcessRequest
方法的InputStream
property所公开的HttpRequest
instance返回的Request
property上的HttpContext
。
这将为您提供POST
请求的内容(您可以通过同一个HttpRequest
上的HttpMethod
property来验证该请求。)
请注意,您必须使用StreamReader
才能将字节流转换为您要解码的字符串(因为这些键/值对应该是url编码的)。
幸运的是,这已经为您完成了。在HttpRequest
实例上,您可以使用NameValueCollection
返回的Form
property来检查作为POST
请求的一部分传递的值,其中包含url编码的键/值对像这样:
public override void ProcessRequest(HttpContext curContext)
{
if (curContext != null) return;
string value = curContext.Form["key"];
// Do other processing.
...
请注意,您还可以使用indexer on the HttpRequest
,但它结合了QueryString
,Form
,Cookies
所展示的所有 我在这种情况下会说的 ServerVariables
集合是一个坏主意,因为你专门发布信息并期望在另一边。
答案 1 :(得分:0)
如果您以“key = value”格式将数据放入请求正文中,则听起来您是URL编码表单数据(只要您使用&符号来区分键/值对(&) )。
如果是这种情况,您应该可以使用:
curContext.Request["key"]
它会在你的例子中给你“价值”。