• .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;
            }
        }
  • 相关阅读:
    剑指offer---尾到头打印链表
    剑指offer---链表中环的入口结点
    剑指offer---删除链表中重复的结点2
    剑指offer---删除链表中重复的结点
    6.shap以及selector的使用
    7.进度条(ProgressBar)
    5.toogleButton以及Switch
    4.基础控件
    3.触摸事件
    2.点击事件和页面切换
  • 原文地址:https://www.cnblogs.com/liuxiaoji/p/13181775.html
Copyright © 2020-2023  润新知