.net core读取Response.Body

这篇具有很好参考价值的文章主要介绍了.net core读取Response.Body。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读取请求体流的demo
        public static async Task<string> GetBodyForm(this HttpContext http)
        {
            var content = string.Empty;
            var request = http.Request;

            try
            {
                request.Body.Position = 0;

                using var reader = new StreamReader(request.Body, Encoding.UTF8, leaveOpen: true);
                var strRequestBody = await reader.ReadToEndAsync();
                Console.WriteLine("ok");
                Console.WriteLine(strRequestBody == null ? "null" : strRequestBody);
                request.Body.Position = 0;
            }
            catch (Exception ex)
            {
                Console.WriteLine("err");
                Console.WriteLine(ex);
            }
            return content;
        }

在ActionFilter中读取Request.Body

    public class ActionFilterTestA : ActionFilterAttribute
    {
        public override async void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("From Request Body---->");
            Console.WriteLine(await context.HttpContext.GetBodyForm());
            Console.WriteLine("From Request Body---->");
        }
    }

报错,一般是在Request.Body处报NotSupportedException

解决方案

在自定义中间件中调用EnableBuffering()

    app.Use(async (context, next) =>
    {
        context.Request.EnableBuffering();
        await next();
    });

疑问

(移除以上正确方案代码) 为什么在ActionFilterTestA中调用context.HttpContext.Request.EnableBuffering();没有效果?(没有报错,但是内容为空字符串)

猜测

请求体流在ActionFilter之前,在自定义中间件之后被消耗。 中间件执行顺序

测试

    // 取消模型绑定
    builder.Services.Configure<ApiBehaviorOptions>(options =>
    {
        options.SuppressInferBindingSourcesForParameters = true;
    });

Request.Body的内容打印成功。

推论

绑定模型时会消耗掉请求体流。

其他资料

https://markb.uk/asp-net-core-read-raw-request-body-as-string.html

结语

推荐还是通过中间件调用EnableBuffering解决问题文章来源地址https://www.toymoban.com/news/detail-711718.html

注意事项:

  1. 避免关闭StreamReader导致关闭了Stream,可以通过leaveOpen: true解决
  2. 重置Position = 0

到了这里,关于.net core读取Response.Body的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET学习笔记----关于.NET Core那些事(3)【配置文件的读取、json文件的通用解析、读取静态文件】

    appsettings.json准备 控制器中读取json 定义与配置文件中需要获取的标签结构完全一致的实体类:IConfiguration .Bind() ----反序列化 要读取的json字符串 定义的实体类 读取json 用到的json字符串 == 用到的类 Startup.cs中的配置 控制器中的代码 运行结果 当我们用《关于.NET Core那些事(2)》

    2024年02月04日
    浏览(42)
  • .NET Core HttpClient请求异常分析

    推送逻辑是在类库中使用HttpClient,所以没有使用HttpClientFactory,因此定义静态变量来使用HttpClient,而非每一个请求就实例化一个HttpClient, 接下来我们来详细分析项目示例代码并对其进行改进 若对接方仅使用HTTPS协议,无需验证证书,最好是忽略证书验证,否则有可能会引起

    2024年02月03日
    浏览(48)
  • Asp.Net VS ASP.NET Core 请求管道

    参考链接 ASP.NET CORE 启动过程及源码解读 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理。HttpRuntime通过请求信息创建HttpContext上下文对象,此对象将贯穿整个管道,直到响应结束。同时创建或从应用

    2024年02月04日
    浏览(78)
  • .NET Core使用 CancellationToken 取消API请求

    您是否曾经访问过一个网站,它需要很长时间加载,最终你敲击 F5 重新加载页面。 即使用户刷新了浏览器取消了原始请求,而对于服务器来说,API也不会知道它正在计算的值将在结束时被丢弃,刷新五次,服务器将触发 5 个请求。 为了解决这个问题,ASP.NET Core 为 Web 服务器

    2024年03月17日
    浏览(52)
  • 实时监控.NET Core请求次数:创建记录最近5分钟的请求,轻松可靠

      概述: 在.NET Core中,通过创建RequestCountMiddleware中间件,结合MemoryCache,实现了记录最近5分钟请求次数的功能。该中间件在每个请求中更新计数,并使用缓存存储,为简单而实用的请求监控提供了一个示例。 要实现一个在.NET Core中记录最近5分钟请求次数的 RequestCountMiddlew

    2024年03月09日
    浏览(49)
  • 轻松理解Java中的public、private、static和final

    一、概念 1、public和private 两个都是访问权限修饰符,用于控制外界对类内部成员的访问。 public:表明对象成员是完全共有的,外界可以随意访问。用public修饰的数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。 private:表明对象成员是完全私有的,不

    2024年02月16日
    浏览(42)
  • 如何在 ASP.NET Core 配置请求超时中间件

    本文参考官方文档,使用Asp.net core 8.0 的最小API 模板项目,配置超时中间件。 超时中间件可用于所有类型的ASP.NET Core应用:最小 API、带控制器的 Web API、MVC 和 Razor Pages。请求超时的属性位于命名空间 Microsoft.AspNetCore.Http.Timeouts 中。 需要注意的是,当应用在调试模式下运行时

    2024年01月20日
    浏览(65)
  • Asp.Net Core服务端处理请求过来的压缩格式

            之前是直接传没有经过压缩的文件字节,有时文件过大的话,可能占宽带就多,宽带流量都是钱。后来有个想法,在客户端把文件进行压缩,把压缩的文件流发给服务端进行解压。 1,先修改项目中 Startup.cs 文件中ConfigureServices()方法中的代码: 2 ,先修改项目中 S

    2024年02月06日
    浏览(53)
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)

    在Web应用中,路由是一个至关重要的概念,它负责将用户的请求映射到相应的处理程序,以确保正确的页面或资源被呈现给用户。通过将用户请求与适当的处理程序关联起来,使得应用能够以有序和可维护的方式响应用户的操作。 一、ASP.NET Core路由基础 1.1 路由的定义和作用

    2024年01月19日
    浏览(68)
  • 在 ASP.NET Core Web API 中处理 Patch 请求

    PUT 和 PATCH 方法用于更新现有资源。 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一种静态语言( dynamic 在此不表),当我们定义了一个类型用于接收 HTTP Patch 请求参数的时候,在 Action 中无法直接从实例中得知客户端提供了哪

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包