在使用 Postman 发送 HTTP 请求时,有一种请求类型支持 raw 格式,直接输入要发送到服务端的文本:
服务端如果想要读取这个输入,一个简单的方法是对 Request.Body 这个数据流进行读取。
和之前的博文《ASP.NET Core 将请求的原始 JSON 绑定到字符串》类似,通过创建一个自定义格式化器的方式就可以将这个功能进行封装,实现参数绑定。
using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Net.Http.Headers; using System.Text; public class StringInputFormatter : TextInputFormatter { public StringInputFormatter() { SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/plain")); SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); } public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding effectiveEncoding) { var request = context.HttpContext.Request; using (var reader = new StreamReader(request.Body, effectiveEncoding)) { var stringContent = await reader.ReadToEndAsync(); return await InputFormatterResult.SuccessAsync(stringContent); } } }
配置 MvcOptions :
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(options => { options.InputFormatters.Insert(0, new StringInputFormatter()); });
使用方法如下:
[HttpPost] public IActionResult Post([FromBody]string html) { }