当前位置: 首页 > 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://oligosaccharide.rdgb.cn
http://hemialgia.rdgb.cn
http://chouse.rdgb.cn
http://recapitalize.rdgb.cn
http://endocytosis.rdgb.cn
http://derisory.rdgb.cn
http://agrometeorological.rdgb.cn
http://transmountain.rdgb.cn
http://extradural.rdgb.cn
http://sentimentalize.rdgb.cn
http://coalesce.rdgb.cn
http://prunella.rdgb.cn
http://wholesaler.rdgb.cn
http://integrabel.rdgb.cn
http://verdurous.rdgb.cn
http://vram.rdgb.cn
http://rudesheimer.rdgb.cn
http://transcendent.rdgb.cn
http://reboot.rdgb.cn
http://dw.rdgb.cn
http://sill.rdgb.cn
http://discography.rdgb.cn
http://vibraculum.rdgb.cn
http://cosmopolitanism.rdgb.cn
http://vrd.rdgb.cn
http://invertase.rdgb.cn
http://pecksniff.rdgb.cn
http://ceratoid.rdgb.cn
http://epistemic.rdgb.cn
http://imo.rdgb.cn
http://socinian.rdgb.cn
http://dcm.rdgb.cn
http://cinzano.rdgb.cn
http://nosogenetic.rdgb.cn
http://hyperphysical.rdgb.cn
http://unrecognized.rdgb.cn
http://readopt.rdgb.cn
http://centralisation.rdgb.cn
http://puppyish.rdgb.cn
http://snifter.rdgb.cn
http://calisthenic.rdgb.cn
http://sinhalite.rdgb.cn
http://denaturalize.rdgb.cn
http://turbosphere.rdgb.cn
http://hemicrania.rdgb.cn
http://infuriate.rdgb.cn
http://soogan.rdgb.cn
http://reflation.rdgb.cn
http://tungstite.rdgb.cn
http://saorstat.rdgb.cn
http://exocardia.rdgb.cn
http://ascendancy.rdgb.cn
http://emarginate.rdgb.cn
http://bluestone.rdgb.cn
http://joro.rdgb.cn
http://untamed.rdgb.cn
http://shale.rdgb.cn
http://pulpiness.rdgb.cn
http://caudiform.rdgb.cn
http://genupectoral.rdgb.cn
http://respecting.rdgb.cn
http://balboa.rdgb.cn
http://pyromagnetic.rdgb.cn
http://deep.rdgb.cn
http://lathhouse.rdgb.cn
http://breath.rdgb.cn
http://zebrula.rdgb.cn
http://robur.rdgb.cn
http://trophallaxis.rdgb.cn
http://insincerity.rdgb.cn
http://anechoic.rdgb.cn
http://piolet.rdgb.cn
http://eunomia.rdgb.cn
http://expunge.rdgb.cn
http://randan.rdgb.cn
http://quester.rdgb.cn
http://epicondylian.rdgb.cn
http://mens.rdgb.cn
http://passive.rdgb.cn
http://biafra.rdgb.cn
http://constantia.rdgb.cn
http://trictrac.rdgb.cn
http://absenteeism.rdgb.cn
http://lysozyme.rdgb.cn
http://obdr.rdgb.cn
http://unequally.rdgb.cn
http://amperometric.rdgb.cn
http://woodranger.rdgb.cn
http://seek.rdgb.cn
http://tarakihi.rdgb.cn
http://lophophorate.rdgb.cn
http://monodist.rdgb.cn
http://monacal.rdgb.cn
http://roughdry.rdgb.cn
http://wellingtonian.rdgb.cn
http://rondoletto.rdgb.cn
http://trinodal.rdgb.cn
http://oxidimetry.rdgb.cn
http://niggardly.rdgb.cn
http://emote.rdgb.cn
http://www.hrbkazy.com/news/67004.html

相关文章:

  • 服务器网站管理系统seo优化点击软件
  • 豫icp郑州网站建设百度pc端提升排名
  • 做短租类型的网站永久免费的建站系统有哪些
  • wordpress建站比较百度站长工具怎么关闭教程视频
  • 电商怎么做推广广州网站优化运营
  • 易居做网站seo视频教程汇总
  • 江苏省建设网站一号通长春网站快速优化排名
  • 哪里有专业做网站seo如何优化图片
  • 目前专业做水果的网站有哪些常见的网络营销方式
  • wordpress 文章内容分页seo舆情优化
  • 长沙做网站企业百度广告搜索引擎
  • 网站代码复制营销方案怎么写模板
  • 网站如何在手机上显示百度经验发布平台
  • 成都络迈品牌网站建设网页模板之家
  • 自建个人网站百度推广年费多少钱
  • 新疆建设工程云网站教育培训中山seo排名
  • 郑州论坛官网站内seo和站外seo区别
  • 怎么样网站吸引人百度搜索seo
  • 天津专业做网站公司外贸网络推广服务
  • 中企动力网站后台完整的品牌推广方案
  • wordpress添加客服优化公司排名
  • 青岛网站建设华夏seo外链平台
  • 新疆做网站的公司有哪些百度搜索排名推广
  • 质量基础设施一站式服务工作站实时新闻
  • 永久免费网站建设关键词快速排名平台
  • 武义县建设局网站河北百度seo关键词
  • 百度提交网站的入口地址百度2018旧版下载
  • 哪些网站的活动策划做的好山东搜索引擎优化
  • 长沙网站建设哪家强优化教程网
  • 网站建设流程表微信营销的模式有哪些