zoukankan      html  css  js  c++  java
  • .NET CORE2.2修改请求和返回body

    1.创建中件间

     public class RequestResponseMiddleware
        { 
            private readonly RequestDelegate _next;
            public RequestResponseMiddleware(RequestDelegate next)
            {
                _next = next;
            }
    
            public async Task Invoke(HttpContext context)
            {
    
                #region 修改请求的body 
                var requestBodyStream = new MemoryStream();//创建一个流 
                //设置当前流的位置未0
                requestBodyStream.Seek(0, SeekOrigin.Begin);//设置从0开始读取
                //这里ReadToEnd执行完毕后requestBodyStream流的位置会从0到最后位置(即request.ContentLength)
                var RequestBody = new StreamReader(context.Request.Body).ReadToEnd();//读取body
                //需要将流位置重置偏移到0,不然后续的action读取不到request.Content的值 
                requestBodyStream.Seek(0, SeekOrigin.Begin);
                byte[] content1 = Encoding.UTF8.GetBytes(RequestBody.Replace("ceo", "CEO"));//替换字符串并且字符串转换成字节
                requestBodyStream.Seek(0, SeekOrigin.Begin);
                requestBodyStream.Write(content1, 0, content1.Length);//把修改写入流中
                context.Request.Body = requestBodyStream;//把修改后的内容赋值给请求body
                context.Request.Body.Seek(0, SeekOrigin.Begin);
    
                #endregion
                #region 返回数据
                using (var ms = new MemoryStream())//创建一个流
                {    
                    var orgBodyStream = context.Response.Body;//获取body内容
                    context.Response.Body = ms;//把创建的流赋值给body
    
                    await _next(context);//执行下一个内容
      
                    using (var sr = new StreamReader(ms))//
                    {
    
                        ms.Seek(0, SeekOrigin.Begin);
                        if (sr.ReadToEnd().Contains("/uploadfiles/"))
                        {
                            //获取appsettings.json中的
                            var appsettingsjson = JObject.Parse(System.IO.File.ReadAllText("appsettings.json"));
                            var fileUrlConfig = (JObject)appsettingsjson["FileUrlConfig"];
                            var url = fileUrlConfig.Property("Url").Value.ToString();
                            ms.Seek(0, SeekOrigin.Begin);
                            byte[] content = Encoding.UTF8.GetBytes(sr.ReadToEnd().Replace("/uploadfiles", url + "/uploadfiles"));//字符串转换成字节
                            ms.Seek(0, SeekOrigin.Begin);
                            ms.Write(content, 0, content.Length);
    
                        }
                        ms.Seek(0, SeekOrigin.Begin);
                        await ms.CopyToAsync(orgBodyStream);
    
    
                    }
                   
                }
                #endregion
    
    
            }
    
    
    
        }

    2.在startup启动项中调用中件间(必须是请求之前调用该中件间)

    app.UseMiddleware<RequestResponseMiddleware>();

  • 相关阅读:
    【转】Android listview与adapter用法
    【转】 Android Fragment 真正的完全解析(下)
    Jupyter Notebook 基本使用
    斯坦福CS231n学习--初识
    MatConvNet 练习使用CNN
    数据库系统学习(四)- 关系模型之关系代数
    操作系统学习(一)--概述启动过程
    数据库系统学习(三)- 关系模型之基本概念
    数据库系统学习(二)- 基础模型
    数据库系统学习(一)-入门篇
  • 原文地址:https://www.cnblogs.com/Blog-JJ/p/11639452.html
Copyright © 2011-2022 走看看