You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:41:13