如何仅从HTTP响应主体中读取特定部分

时间:2018-03-08 07:49:40

标签: c# httpresponse httpcontext seek

我只需要阅读以下回复正文中的mode段。

  

grant_type =密码&安培;用户名= demouser&安培;密码= test123&安培; CLIENT_ID = 500DWCSFS-D3C0-4135-A188-17894BABBCCF&安培;模式=设备

我使用下面的函数来读取HTTP正文,它给了我整个身体。如何在不使用子字符串或更改seek()中的值的情况下删除mode段:bodyStream.BaseStream.Seek(3, SeekOrigin.Begin);

var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
var bodyText = bodyStream.ReadToEnd();

1 个答案:

答案 0 :(得分:2)

你做不到。 HTTP使用TCP,它要求你无论如何都要读取整个主体,你不能“寻找”成TCP流。嗯,你可以,但仍然读取整个身体并丢弃未使用的碎片。

所以你来读取整个流,你来有意义地解析它,因为另一个参数也可以包含字符串“mode”,它也可以在开始时,您也无法搜索&mode

鉴于这是一个表单帖子,您只需访问Request.Form["mode"]即可。如果您确实想自己解析它:

string formData;
using (reader = new StreamReader(HttpContext.Current.Request.InputStream))
{
    formData = reader.ReadToEnd();
}

var queryString = HttpUtility.ParseQueryString(formData);
var mode = queryString["mode"];