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


    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;
            }
        }

    参照:https://www.cnblogs.com/lwqlun/p/10954936.html

  • 相关阅读:
    C#面向对象编程进阶(一) ——实现栈
    Hibernate组件和关联映射
    创建多线程的两种方法
    Mybatis:ResultMap
    Mybatis:配置解析
    IDEA复制多行及对多行代码上下左右移动
    Mybatis:CRUD操作
    Mybatis简介
    算法分类 ,时间复杂度 ,空间复杂度,优化算法
    JAVA LOG4J使用方法
  • 原文地址:https://www.cnblogs.com/dongh/p/15656956.html
Copyright © 2020-2023  润新知