using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using System.Text; namespace Ds.Module.WeChat.Utilities { /// HTTP 请求工具类 public static class RequestUtility { /// 【异步方法】从 Request.Body 中读取流,并复制到一个独立的 MemoryStream 对象中 /// /// /// public static async Task GetRequestMemoryStreamAsync( this HttpRequest request, bool? allowSynchronousIO = true) { IHttpBodyControlFeature bodyControlFeature = request.HttpContext.Features.Get(); if (bodyControlFeature != null && allowSynchronousIO.HasValue) bodyControlFeature.AllowSynchronousIO = allowSynchronousIO.Value; return (Stream)new MemoryStream(Encoding.UTF8.GetBytes(await new StreamReader(request.Body).ReadToEndAsync())); } /// 从 Request.Body 中读取流,并复制到一个独立的 MemoryStream 对象中 /// /// /// public static Stream GetRequestStream( this HttpRequest request, bool? allowSynchronousIO = true) { IHttpBodyControlFeature bodyControlFeature = request.HttpContext.Features.Get(); if (bodyControlFeature != null && allowSynchronousIO.HasValue) bodyControlFeature.AllowSynchronousIO = allowSynchronousIO.Value; return (Stream)new MemoryStream(Encoding.UTF8.GetBytes(new StreamReader(request.Body).ReadToEnd())); } /// 从 Request.Body 中读取流,并复制到一个独立的 MemoryStream 对象中 /// /// /// public static MemoryStream GetRequestMemoryStream( this HttpRequest request, bool? allowSynchronousIO = true) { IHttpBodyControlFeature bodyControlFeature = request.HttpContext.Features.Get(); if (bodyControlFeature != null && allowSynchronousIO.HasValue) bodyControlFeature.AllowSynchronousIO = allowSynchronousIO.Value; return new MemoryStream(Encoding.UTF8.GetBytes(new StreamReader(request.Body).ReadToEnd())); } } }