ASP.NET Core读取Request.Body的正确方法

2023-05-16

参考文章: 

深入探究ASP.NET Core读取Request.Body的正确方式 https://www.cnblogs.com/wucy/archive/2021/05/06/14699717.html

当然我们也可以自己实现一套逻辑来替换Body,只要我们重写的时候让这个Stream支持重置读取位置即可。

直接上代码:


public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    //允许body重用
    app.Use(next => context =>
    {
        context.Request.EnableBuffering();
        return next(context);
    })
}

//过滤器或者中间件中调用
string body = await request.Body.ReadToStringAsync(); 

public static partial class Extention
    {
        /// <summary>
        /// 将流Stream转为byte数组
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static byte[] ReadToBytes(this Stream stream)
        {
            stream.Seek(0, SeekOrigin.Begin);
            byte[] bytes = new byte[stream.Length];
            stream.Read(bytes, 0, bytes.Length);
            stream.Seek(0, SeekOrigin.Begin);

            return bytes;
        }

        /// <summary>
        /// 将流读为字符串
        /// 注:默认使用UTF-8编码
        /// </summary>
        /// <param name="stream">流</param>
        /// <returns></returns>
        public static async Task<string> ReadToStringAsync(this Stream stream)
        {
            return await stream.ReadToStringAsync(Encoding.UTF8);
        }

        /// <summary>
        /// 将流读为字符串
        /// 注:使用指定编码
        /// </summary>
        /// <param name="stream">流</param>
        /// <param name="encoding">指定编码</param>
        /// <returns></returns>
        public static async Task<string> ReadToStringAsync(this Stream stream, Encoding encoding)
        {
            if (stream.CanSeek)
            {
                stream.Seek(0, SeekOrigin.Begin);
            }

            string resStr = string.Empty;
            resStr =await new StreamReader(stream, encoding).ReadToEndAsync();

            if (stream.CanSeek)
            {
                stream.Seek(0, SeekOrigin.Begin);
            }

            return resStr;
        }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core读取Request.Body的正确方法 的相关文章

  • 升级到 NHibernate 3.1 时 NHibernate 映射中断

    我最近刚刚升级到 FluentNHibernate 1 2 它使用 NHibernate 3 1 升级后 我的一些旧映射无法正常工作 我一直很难弄清楚为什么 我想也许这里有人可以提供帮助 我有 3 个课程 练习 练习和练习练习 一个练习可以
  • 根据环境选择目标 32 位或 64 位本机 DLL

    我有一个本机 DLL 有 32 位和 64 位版本 x86 我想创建一个适用于两种体系结构 任何 CPU 的包装器 并根据当前环境 32 位或 64 位 在运行时 加载 DLL 的正确版本 这个过程应该自动发生 这样我的 DLL 的用户就不
  • 托管扩展性框架 (MEF) 与复合 UI 应用程序块 (CAB)

    我们目前正在考虑在下一个应用程序中使用 CAB 或 MEF 我没有在 Codeplex 上看到任何有关如何处理同级控制通信的事件代理的示例 也许我错过了 MEF 中的控制间通信如何工作 此外 我们计划使用 Infragistics 它为 C
  • 在openxml中向Excel添加样式

    我想在打开的 Excel 文档中设置文本的前景色以写入文本 为此我尝试过 var stylesheet1 spreadSheet WorkbookPart WorkbookStylesPart Stylesheet Fills fills1
  • 抑制第 3 方库控制台输出?

    我需要调用一个第三方库 该库恰好会向控制台输出一堆内容 代码就像这样 int MyMethod int a int b ThirdPartyLibrary Transform a spews unwanted console output
  • .NET中的文档管理系统[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道可以与 NET集成的文档管理系统 或模块 Thanks 以下是当今企业中一些最常见的 DMS
  • 使用 winforms 、 mdi 、父子窗体,在父窗体下指定空间打开子窗体

    我有一个 winform MAINFORM 需要以此形式打开子窗体 如图所示 黑色部分是一个面板并且包含一个编号 具有多个节点的 LinkLabels 和 Treeview 在其余部分中 我想在单击面板上的链接标签时显示子表单 子表单应完全
  • 如何在实体框架中进行“in”查询?

    如何在 linq toEntity 中进行选择以从列表中选择带有键的行 像这样的东西 var orderKeys new int 1 12 306 284 50047 var orders from order in context Ord
  • MSTest 命令行设置

    我们需要能够将服务器地址传递到 MSTest 命令行中 以便由 TeamCity 持续集成 CI 软件调用我们的测试套件 之前我们在 C 单元测试中创建了 if 常量 这在 MSBuild 中进行了更改 有没有更好的办法 这种方式看起来很h
  • 如何确定实际物理网卡的 MAC 地址——而不是 VPN 创建的虚拟网络接口 (.NET C#)

    背景 我正在尝试从计算机中获取唯一标识符 并且希望每次都能可靠地返回相同的 MAC 地址 相信我 我有使用 MAC 地址的理由 并且阅读了许多关于替代唯一 id 方法的帖子 是的 我考虑过他们是否没有任何网卡 Problem 问题出在 NE
  • 在 Windows 任务栏中对单独的进程进行分组

    我有许多逻辑上相关的独立进程 但所有进程都是单独启动的 没有共同的 父 进程 是否可以使它们在 Windows 任务栏中显示为一组 工作样本 这是一些受雷米答案启发的工作代码 using System using System Runtim
  • Django:从 QueryDict 读取 JSON 对象数组

    如何通过 JS 的 AJAX 调用传递复合 JSON 结构 并在服务器端将其读取为 python 中的 非常相似 的数据结构 我知道可以使用 json 格式 simplejson 等 但我不知何故觉得 QueryDict 本身在我的情况下格
  • 内部应用程序 - 为什么不公开所有内容?

    我是否有理由不应该在我们的 Intranet 报告应用程序中将所有内容标记为公开 公司之外的任何人都无法访问此代码 我们有大约 20 个项目 大多数都是小型且具体的 我们真的应该将事物标记为公开以外的任何东西吗 我对此有自己的想法 但我试图
  • X509 C# 指南/教程

    谁能给我提供有关 X509 证书的良好介绍材料以及 C 示例 你可以从这里开始 X509证书 MSDN 资源 http msdn microsoft com en us library system security cryptograph
  • 使用 C# / .NET 替换文件中文本的最佳方法是什么?

    我有一个文本文件 正在作为非常大的数据提取的一部分写入 文本文件的第一行是提取的 帐户 数量 由于此提取的性质 直到过程结束时才知道该数字 但文件可能很大 几百兆 在 C NET 中打开文件 在本例中是一个简单的文本文件 并替换文本第一 行
  • 什么插件/工作台框架是 Eclipse RCP 的最佳 .NET 替代品?

    我正在寻找一个与 Eclipse 插件框架相当的基于插件的应用程序框架 在我看来 它包括 a core 插件管理框架 Equinox OSGI 它提供了声明扩展端点 然后发现并加载为这些端点提供服务的插件的能力 这与依赖注入不同 但不可否认
  • 如何使用 ASP.NET 访问 Facebook 广告 API

    我希望访问使用适用于 NET 的 FaceBook 工具包的 FaceBook 广告 API 我在 codeplex com 中找到的 希望访问ads estimateTargetingStats尤其 Facebook 广告 API 详情
  • 将阻塞调用包装为异步,以实现更好的线程重用和响应式 UI

    我有一个类负责通过调用遗留类来检索产品可用性 该遗留类本身通过进行 BLOCKING 网络调用在内部收集产品数据 请注意 我无法修改旧版 API 的代码 由于所有产品都是相互独立的 因此我希望并行收集信息 而不会创建任何不必要的线程 也不会
  • .net 日历 - 使整个单元执行回发(可点击)

    我已经启动并运行了一个 net 日历 并从数据库中获取信息 默认情况下 天数会应用回发操作 我想做的是将该操作应用于整个单元格 这样用户就不需要仅单击文本链接 我是 dayRenderer 操作 我有以下行来尝试复制该操作 但第二个参数我不
  • 具有 ItemsControl 嵌入网格的 SharedGridSize 组

    我正在尝试使用以下方法将多个网格嵌入到另一个网格中ItemsControl并使所有子网格共享相同的行高

随机推荐

  • Win10 WSL忘记用户密码,重置密码

    win10中WSL登录是不用密码的 xff0c 当需要使用用户权限但是忘记密码的时候 xff0c 可以使用如下办法以root身份登录WSL并重置密码 1 以管理员身份打开 PowerShell 2 输入命令 wsl exe user roo
  • 51单片机定时时间的计算

    单片机根据计时 计数模式的不同 xff0c 来进行计算 M1 M0 工作模式 说明 0 0 0 13位计时计数器 xff08 8192 xff09 0 1 1 16位计时计数器 xff08 65536 xff09 1 0 2 8位计时计数器
  • Go语言之禅

    本文翻译自Go社区知名Gopher和博主Dave Cheney的文章 The Zen of Go 本文来自我在GopherCon Israel 2020上的演讲 文章很长 如果您希望阅读精简版 xff0c 请移步到the zen of go
  • UIScrollView及其子类停止滚动的监测

    作为iOS中最重要的滑动控件 UIScrollView居然没有停止滚动的Delegate方法 这有点蛋疼 但是我们可以根据滚动状态来判断是否滚动 span class hljs preprocessor pragma mark scroll
  • PCL库中Marching Cubes(移动立方体)算法的解析

    PCL库中Marching Cubes xff08 移动立方体 xff09 算法解析 1 Marching Cubes算法的原理这里不再赘述 xff0c 不懂的话 xff0c 提供一下文献资源 xff1a 链接 xff1a MARCHING
  • ubuntu18.04安装cuda-10.0和cudnn-7.4.2

    安装cuda 10 0 1 gcc 版本 Ubuntu18 04默认gcc g 43 43 7 3版本 xff0c 如果安装cuda 9并不支持 gcc g 43 43 7 xff0c 所以先降级至6或6以下 我自己的gcc是7 5 0 安
  • Ubuntu安装anaconda3后找不到conda命令

    Ubuntu安装anaconda3后找不到conda命令的原因是没有把anaconda3添加到路径 xff0c 类似于Windows中添加到环境变量 xff0c 所以找不到命令 解决方法是在终端中运行一下命令 xff1a echo 39 e
  • uCharts Y轴格式化

    官方文档 uCharts跨平台图表库 1 Y轴格式化用法 xff1a yAxis data calibration true position 39 left 39 title 39 折线 39 titleFontSize 12 forma
  • C#/.NET Winform 界面库UI推荐

    以下是C CSkin界面库的官方板块 xff1a http bbs cskin net thread 622 1 1 html 几款开源的Windows界面库 https blog csdn net blade2001 article de
  • layui中实现按钮点击事件

    首先 xff0c 小编要告诉大家一个残酷的现实 xff0c 那就是小编没有找到layui对点击事件的支持 这里的点击事件是指单纯的点击事件 xff0c 而不是提交事件 xff0c 或者是数据表格中内嵌的button xff0c 对于这两者
  • C# devexpress gridcontrol 分页 控件制作

    这个小小的功能实现起来还是有一点点复杂 分页单独一个usercontrol 出来 导致查询换页 与gridcontrol页面分离 一般通过换页事件通知girdcontrol 做出查询 查询来说有时是查询所有 有时是查询一个月 或者别的时间
  • SQL Server 创建索引(CREATE NONCLUSTERED INDEX )

    索引的简介 xff1a 索引分为聚集索引和非聚集索引 xff0c 数据库中的索引类似于一本书的目录 xff0c 在一本书中通过目录可以快速找到你想要的信息 xff0c 而不需要读完全书 索引主要目的是提高了SQL Server系统的性能 x
  • .NET Core/.NET5/.NET6 开源项目汇总:(权限)管理系统

    前言 企业管理系统一般包含后台管理UI 组织机构管理 权限管理 日志 数据访问 表单 工作流等常用必备功能 下面收集的几款优秀开源的管理系统 xff0c 值得大家入门学习 如有新的优秀项目 xff0c 我会不断补充 开源项目是众多组织与个人
  • Nginx配置指令(一)

    1 daemon 语法 xff1a daemon on off 默认 xff1a on 如果使用daemon off xff0c nginx将会运行在前台 生产远景不建议如此使用 xff0c 虽然可以 2 env 语法 xff1a env
  • SQL将Json字符串转为表格

    支持复杂结构的使用 使用Parent ID来对应Object ID产生关系就好 实现对Json数据的从文字到表变量的转换 例 34 FieldName 34 34 DateKey 34 34 Title 34 34 汇总后日期 34 34
  • JavaScript实现动态添加的元素添加点击事件

    在页面开发过程中常常遇到需要动态添加元素 xff0c 然后给这一元素绑定相关事件的情况 xff0c 这种情况下一般需要给元素加上相关属性 xff0c 然后写这些元素的事件函数即可 动态添加的元素怎么绑定事件呢 xff1f 原生JavaScr
  • javascript解决小数的加减乘除精度丢失的方案

    原因 js按照2进制来处理小数的加减乘除 在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配 所以会出现如下情况 javascript js 的小数点加减乘除问题 xff0c 是一个js的bug如0 3 1 61 0 29999999
  • SqlServer 获取字符串中数字,中文及字符部分数据

    获取英文字符数据 Create function dbo Fun GetChar 64 No varchar 100 RETURNS varchar 100 AS BEGIN WHILE PATINDEX 39 A Za z 39 64 N
  • Asp.net 如何跳过基于表单的身份验证(authentication)

    淘到的Form验证过程 xff1a xff08 如果所有页面继承了同一个判断是否登录的类 xff0c 路径的判断是个问题 xff0c 文件所处的位置可能不同 xff0c 有的是二级菜单 xff0c 有的三级 还有的是通过Request Ur
  • ASP.NET Core读取Request.Body的正确方法

    参考文章 xff1a 深入探究ASP NET Core读取Request Body的正确方式 https www cnblogs com wucy archive 2021 05 06 14699717 html 当然我们也可以自己实现一套