首页 新闻 会员 周边 捐助

asp.net core中2次读取Request.Body的问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-11-26 12:56

代码如下:

复制代码
using (StreamWriter writer = process.StandardInput)
{
    Request.Body.CopyTo(writer.BaseStream);
    if(_env.IsDevelopment())
    {
        Console.WriteLine("Request.Body:");
        Request.Body.Position = 0;
        Request.Body.CopyTo(Console.OpenStandardOutput());                        
    }
}
复制代码

在执行至 Request.Body.Position=0 时出错:

System.NotSupportedException: Specified method is not supported.
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestStream.set_Position(Int64 value)
dudu的主页 dudu | 高人七级 | 园豆:29568
提问于:2016-11-26 12:46
< >
分享
最佳答案
0

借助MemoryStream解决了这个问题,先将Request.Body复制到MemoryStream,然后从MemoryStream读取。

using (var buffer = new MemoryStream())
{
    Request.Body.CopyTo(buffer);
    buffer.Position = 0;
    buffer.CopyTo(writer.BaseStream);
    Console.WriteLine("Request.Body:");
    buffer.Position = 0;
    buffer.CopyTo(Console.OpenStandardOutput());
}  
dudu | 高人七级 |园豆:29568 | 2016-11-26 12:56

ASP.NET Core 2.0 中已经针对这个问题提供了解决方法 —— Request.EnableRewind(); ,详见 ASP.NET Core 中读取 Request.Body 的正确姿势

dudu | 园豆:29568 (高人七级) | 2018-06-16 16:54
其他回答(2)
0

Response).Body).CanRead=false 很郁闷  请教一下这个怎么处理 一直是 不能读 OnActionExecuting  OnActionExecuted都是这样 

SpeakHero | 园豆:31 (初学一级) | 2016-12-07 02:57
0

if (httpContent.Request.Body.CanRead)
{
var memery = new System.IO.MemoryStream();
httpContent.Request.Body.CopyTo(memery);
memery.Position = 0;
log.Content = new System.IO.StreamReader(memery, System.Text.UTF8Encoding.UTF8).ReadToEnd();
memery.Position = 0;
httpContent.Request.Body = memery;
}

欧阳寒玟 | 园豆:207 (菜鸟二级) | 2018-04-07 03:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册