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>();

  • 相关阅读:
    java redis 实现用户签到功能(很普通简单的签到功能)
    java 如何快速的获取浏览量
    java 限制每隔15分钟才允许执行一次程序
    C#读写文本文件源码片段
    培训报名微信小程序线上开店的方法
    小米手机使用应用沙盒动态修改基带参数
    Coordinates of numpy array from index and shape的代码
    小米手机使用应用沙盒动态修改电池信息
    三星手机使用应用沙盒动态修改serial参数
    通过python post提交数据的源码演示
  • 原文地址:https://www.cnblogs.com/Blog-JJ/p/11639452.html
Copyright © 2011-2022 走看看