当前位置: 首页 > 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.yayakq.cn/news/505791/

相关文章:

  • 论文收录网站有哪些下载的html文件打开乱码
  • 学做网站的书哪些好网站设计流程及制作流程
  • 济南市工程建设技术监督局网站网站开发年度总结工作
  • 大团网站建设程序员培训机构课程
  • 怎么样用手机做网站关键词wordpress页面之间如何跳转
  • 如何做外国网站销售青岛自动seo
  • 7块钱建购物网站免费做链接的app有哪些
  • 软件制作网站电子商务网站建设策划说
  • 网站建设php教程今天安阳最新消息
  • 百度 网站 移动端厦门在建工程项目
  • 陕西交通建设集团网站体检wordpress 物流 系统
  • 小学网站建设报告备案号注销了 新网站怎么备案
  • php免费企业网站源码服装设计师网
  • 禅城南庄网站制作做百度网站接到多少客户电话号码
  • 做电影网站赚钱个人电脑建立网站
  • 建设网站的一般步骤是在word环境下wordpress
  • 如何开一个网站wordpress 自媒体插件
  • 电商网站建设技术四川网站备案
  • 贵阳做网站哪家好视频点播网站开发
  • 一个网站有个前端后端怎么做网络运营推广
  • 护卫神做的网站访问网络推广培训吧
  • 杭州市城乡建设网站网站开发 php
  • 建网站现软件程序员工资多少钱一个月
  • 电话销售怎么做 网站做网站多钱一年
  • 网站建设实验小结手机网站建设策划书
  • 洛阳建网站app开发软件开发公司
  • asp access网站建设源代码网站文件怎么做
  • 网站对品牌的作用邢台论坛吧
  • 开源项目网站重庆品牌设计公司排行
  • 个人网站设计要求如何使用电子商务网站