zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    Stack堆栈的数据结构
    反坦克导弹相关网页
    Java 执行jar文件出现版本错误信息
    Python3 数字保留后几位
    Python3: Windows系统上同时安装Python2和Python3
    Linux 搭建FTP
    DBCP、c3p0、Druid三大连接池区别
    Sybase 存储过程中IF的用法
    Confluence5.8部分空间名称显示为问号的解决方案
    Mysql 更改编码方式
  • 原文地址:https://www.cnblogs.com/dongh/p/15656956.html
Copyright © 2011-2022 走看看