当前位置: 首页 > news >正文

江苏公司响应式网站建设报价搜索最多的关键词的排名

江苏公司响应式网站建设报价,搜索最多的关键词的排名,网站建设平台排名,陕西建设执业中心网站概要 本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。 代码和实现 现象解释 首先我们尝试在自定义中间件中直接读取Response.Body,代码如…

概要

本文主要介绍如何在ASP.NET Core的中间件中,读取Response.Body的方法,以便于我们实现更多的定制化开发。本文介绍的方法适用于.Net 3.1 和 .Net 6。

代码和实现

现象解释

首先我们尝试在自定义中间件中直接读取Response.Body,代码如下:

public class GlobalRequestManagementMiddleware : IMiddleware{public async Task InvokeAsync(HttpContext context, RequestDelegate next){try{await next(context);var reader = new StreamReader(context.Response.Body, Encoding.UTF8);var bodyText = await reader.ReadToEndAsync();}catch (Exception){throw;}}}

我们会得到一个异常消息,表示Response.Body是一个不可读的Stream流。
在这里插入图片描述
我们添加更多的调试信息,查看Response.Body的具体属性:

 public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{try{await next(context);Console.WriteLine("CanRead is " + context.Response.Body.CanRead);Console.WriteLine("CanSeek is " + context.Response.Body.CanSeek);Console.WriteLine("CanWrite is " + context.Response.Body.CanWrite);var reader = new StreamReader(context.Response.Body, Encoding.UTF8);var bodyText = await reader.ReadToEndAsync();}catch (Exception){throw;}
}

输出结果如下:

在这里插入图片描述
Response.Body是一个不可读,不可查找,但是可写的Stream,CanRead,CanSeek和CanWrite全部是只读属性,不可修改。

解决方案

从Response.Body本身来解决这个问题,已经基本不可能了。因为该Stream已经被标记为不可读,并且不可修改。

我们变换解决思路,既然这个Stream无法使用,那我们就在其进入其它中间件,过滤器和Action之前,将其替换为可读和可写的普通内存流。代码如下:

public async Task InvokeAsync(HttpContext context, RequestDelegate next){using ( var bodyStream = new MemoryStream()){Stream originalBody = context.Response.Body;context.Response.Body = bodyStream ;await next(context);bodyStream.Position = 0;var reader = new StreamReader(context.Response.Body, Encoding.UTF8);var bodyText = await reader.ReadToEndAsync();Console.WriteLine("bodyText is " + bodyText);bodyStream.Position = 0;await bodyStream.CopyToAsync(originalBody);context.Response.Body = originalBody;}}
  1. 用普通的MemoryStream替代原有Response.Body中的Stream;
  2. 使用MemoryStream 去接收中间件后面操作产生的操作结果;
  3. 读取MemoryStream中的操作结果;
  4. 重置MemoryStream,以方便后面的操作读取;
  5. Response.Body虽然是不可读的,但是可写,我们可以将中间件后续操作中的操作结果写入最初的Response.Body中;
  6. 将context.Response.Body替换为最初的Stream流。

用上述方法,我们就可以读取甚至修改Response.Body中的内容。

我们调用一个Post请求,查看我们自定义的Middleware和后面的操作是否可以正常完成:

[HttpPost("{id}")]
public Student Post([FromBody] Student student)
{return student;
}

执行结果如下:

在这里插入图片描述

在这里插入图片描述
Body的内容在中间件中被成功读出,Post请求成功的将Student对象返回。

附录

  public class Student{public int Id { get; set; }public string Name { get; set; }}
http://www.yidumall.com/news/25972.html

相关文章:

  • 网站怎么做全站搜索网络营销推广方案设计
  • 网站建设 三合一长沙网站推广公司排名
  • asp.net构建门户网站百度推广登录后台登录入口
  • 王璞网站开发实战怎么做电商创业
  • 升阳广州做网站公司舆情信息报送
  • 微信抽奖小程序制作长春百度关键词优化
  • 泰安集团网站建设公司站长之家seo工具包
  • 天河网站建设信科网络百度链接收录提交入口
  • 帝国做的网站根目录营销客户管理系统
  • 谁做视频网站免费做网站推广的软件
  • 网站内外链怎么做品牌软文营销案例
  • 深圳网深圳网站开发公司友情链接实例
  • html做网站收藏按钮抖音关键词挖掘工具
  • tq网站建设广告营销推广方案
  • 提出网络营销思想的网站改版计划磁力岛引擎
  • 深圳网站建设代理黄页引流推广网站软件免费
  • 做电商宠物带哪个网站最好友情链接交换源码
  • 电子商务网站设计岗位主要是免费招收手游代理
  • 网站开发学校刚刚济南发通知
  • 海口建站40个免费网站推广平台
  • 潍坊网站建设公司哪家好seo平台优化服务
  • 找人做网站被骗 公安不管友情链接互换网站
  • 网站式登录页面模板拼多多关键词排名查询
  • 做网站哪个公司好百度公司官方网站
  • 怎么做电商网站 用户画像网站优化培训学校
  • 公司官方网站建站如何进行网站制作
  • 网站后期运营方案步骤如何创建自己的卡网
  • 做公司网站需要多做外贸用什么软件找客户
  • 手机适配网站厦门关键词优化企业
  • 如何做高大上的网站 知乎如何推广公众号