首页 > Web开发 > 详细

.net Core自定义中间件中读取Request.Body和Response.Body的内容?

时间:2020-06-23 15:15:33      阅读:155      评论:0      收藏:0      [点我收藏+]

1 .Net Core 2.X时代

public IActionResult Index()
{
    Request.EnableRewind();
    using (var reader = new StreamReader(Request.Body))
    {
        var body = reader.ReadToEnd();
        // Do something
        Request.Body.Seek(0, SeekOrigin.Begin);
        body = reader.ReadToEnd();
    }
    // More code
    return View("Index");
}

2 .NET Core 3.0时代

public class SignatureMiddleware
    {
        private readonly RequestDelegate _next;

        public SignatureMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context) 
        {
            //启用读取request
            context.Request.EnableBuffering();

            //变量设置
            var request = context.Request;
            var response = context.Response;

            //请求body
            using var requestReader = new StreamReader(request.Body);
            var requestBody = await requestReader.ReadToEndAsync();
            request.Body.Position = 0;

            //设置stream存放ResponseBody
            var responseOriginalBody = response.Body;
            using var memStream = new MemoryStream();
            response.Body = memStream;
            
            // 执行其他中间件
            await _next(context);

            //处理执行其他中间件后的ResponseBody
            memStream.Position = 0;
            var responseReader = new StreamReader(memStream);
            var responseBody = await responseReader.ReadToEndAsync();
            memStream.Position = 0;
            await memStream.CopyToAsync(responseOriginalBody);
            response.Body = responseOriginalBody;
        }
    }

 

.net Core自定义中间件中读取Request.Body和Response.Body的内容?

原文:https://www.cnblogs.com/liuxiaoji/p/13181775.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!