ASP.NET Core Minimal API POST接口Swagger无原始请求体输入项
解决ASP.NET Core Minimal API Swagger无原始请求体输入项的问题
直接给两种可行方案,按需选择:
方案一:用[StringBody]属性(.NET 7+推荐)
把原来的HttpRequest参数换成带[StringBody]标记的string参数,Swagger会自动生成原始请求体输入框,代码修改后如下:
app.MapPost("/Authenticate", async ([StringBody] string rawContent) => { // 直接使用rawContent处理业务逻辑,无需手动读取流 // ....... }) .WithName("Authenticate") .WithOpenApi();
这个方法最简单,.NET 7及以上版本原生支持,既省去了手动读取流的代码,又能自动适配Swagger的输入界面。
方案二:手动配置OpenApi请求体(兼容.NET 6及以下)
如果项目仍在使用.NET 6,可以手动给Swagger添加请求体定义,通过.WithOpenApi()修改操作元数据:
using Microsoft.OpenApi.Models; app.MapPost("/Authenticate", async (HttpRequest Request) => { string rawContent = string.Empty; using (var reader = new StreamReader(Request.Body, encoding: Encoding.UTF8, detectEncodingFromByteOrderMarks: false)) { rawContent = await reader.ReadToEndAsync(); } // ....... }) .WithName("Authenticate") .WithOpenApi(operation => new OpenApiOperation(operation) { RequestBody = new OpenApiRequestBody { Content = new Dictionary<string, OpenApiMediaType> { // 支持纯文本格式输入 ["text/plain"] = new OpenApiMediaType { Schema = new OpenApiSchema { Type = "string" } }, // 支持JSON格式输入(按需添加) ["application/json"] = new OpenApiMediaType { Schema = new OpenApiSchema { Type = "string" } } } } });
修改完成后重启项目,Swagger UI中就会出现请求体输入区域。
原方法无效的原因
HttpRequest是框架内部对象,Swagger不会将其识别为需要用户输入的请求体参数,因此必须明确告知Swagger这是一个需要用户输入的原始请求体——要么用属性标记,要么手动配置元数据。
内容的提问来源于stack exchange,提问作者jany
相关产品推荐
相关产品推荐

