如何只读取 HTTP 响应正文中的特定部分

How to read only a specific part from HTTP Response body

我只需要阅读下面响应正文中的 mode 部分。

grant_type=password&username=demouser&password=test123&client_id=500DWCSFS-D3C0-4135-A188-17894BABBCCF&mode=device

我使用下面的函数来读取 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();

你不能。 HTTP 使用 TCP,无论如何都需要您读取整个主体,您不能 "seek" 进入 TCP 流。好吧,你可以,但这仍然会读取整个正文并丢弃未使用的部分。

因此您必须读取整个流,并且您必须对其进行有意义的解析,因为另一个参数也可能包含字符串"mode",也有可能在开头,所以也搜索不到&mode

鉴于这是一个表单 post,您可以简单地访问 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"];