zoukankan      html  css  js  c++  java
  • ASP.Net Core读取Http请求正文的一种方法

    由于ASP.Net Core在3.0版本中禁用了同步读取Request.Body,所以会引发异常,网上大多数教程都是如何将禁用同步读取流的选项重新启用,由于微软的官方文档中已经警告了同步读取Request.Body会引发内存泄漏,所以需要用推荐的方式读取Request.Body,也就是使用PipeReader来读取,下面封装了一个方法和一个示例供参考:

            /// <summary>
            /// 获取请求头字节
            /// </summary>
            /// <param name="token"></param>
            /// <param name="reader"></param>
            /// <returns></returns>
            [NonAction]
            private async Task<byte[]> GetRequestBodyBytesAsync(CancellationToken token, PipeReader reader)
            {
                byte[] bodyBytes = null;
                while (!token.IsCancellationRequested)
                {
                    ReadResult readResult = await reader.ReadAsync();
                    if (readResult.IsCompleted)
                    {
                        var buffer = readResult.Buffer;
                        bodyBytes = buffer.ToArray();
                        break;
                    }
                    else
                    {
                        var buffer = readResult.Buffer;
    
                        reader.AdvanceTo(buffer.Start, buffer.End);
                    }
                }
    
                return bodyBytes;
            }

    使用示例:

            [HttpPost]
            public async Task<IActionResult> TestAction()
            {
                var bodyBytes = await GetRequestBodyBytesAsync(
                    HttpContext.RequestAborted, Request.BodyReader);
    
                //如果内容是字符串则转换成字符串,如果是文件则是文件的Byte数组
                string content = Encoding.UTF8.GetString(bodyBytes);
    
                Console.WriteLine("Http Request Body: {0}", content);
    
                return Ok();
            }
  • 相关阅读:
    学习PetShop3.0(9)工厂的资料
    net程序架构开发
    《解剖PetShop》系列之一
    与数据库相关的名词解释
    asp 导出Excel
    《解剖PetShop》系列之二
    业务模块的设计原则
    《解剖PetShop》系列之三
    JAVA之BigInteger(转)【转】【很好用啊】
    php_mcrypt.dll无法加载解决方法
  • 原文地址:https://www.cnblogs.com/myhalo/p/15431224.html
Copyright © 2011-2022 走看看