如何在ASP.NET中获取原始请求正文?

问题描述

| 在“ 0”事件中,如何读取整个原始请求正文?当我尝试读取它时,ѭ1的长度为0,这使我相信ASP.NET可能已经读取了它。 我试图这样读取InputStream:
using (StreamReader reader = new StreamReader(context.Request.InputStream))
{
    string text = reader.ReadToEnd();
}
但是我得到的只是一个空字符串。我已将位置重置为0,但是当然,一旦读取流,它就永远消失了,因此不起作用。最后,检查流的长度返回0。 编辑:这是用于POST请求。     

解决方法

        没有在BeginRequest事件中填充请求对象。您需要在事件生命周期的后期访问此对象,例如Init,Load或PreRender。另外,您可能希望将输入流复制到内存流,因此可以使用seek:
protected void Page_Load(object sender,EventArgs e)
{
    MemoryStream memstream = new MemoryStream();
    Request.InputStream.CopyTo(memstream);
    memstream.Position = 0;
    using (StreamReader reader = new StreamReader(memstream))
    {
        string text = reader.ReadToEnd();
    }
}
    ,        Pål的回答是正确的,但也可以做得更短:
string req_txt;
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
{
    req_txt = reader.ReadToEnd();
}
这是.NET 4.6。     ,        我有类似的要求来获取原始内容并遇到相同的问题。我发现打ѭ5解决了问题。 这不是一个特别好的方法,因为它对底层基础结构的运行方式进行了假设,但它似乎有效。     ,        在ASP.NET Core 2中:
using (var reader = new StreamReader(HttpContext.Request.Body)) {
    var body = reader.ReadToEnd();
}
    ,        重置InputStream的位置很重要。
var memstream = new MemoryStream();
Request.InputStream.CopyTo(memstream);
Request.InputStream.Position = 0;
using (StreamReader reader = new StreamReader(memstream)) {
    var text = reader.ReadToEnd();
    Debug.WriteLine(text);
}
    ,        这是我最终要做的事情:
//Save the request content. (Unfortunately it can\'t be written to a stream directly.)
context.Request.SaveAs(filePath,false);
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...