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

.NET 5中移除Swagger UI请求体默认的"string"显示

解决.NET 5 Swagger请求体显示"string"改为"{}"的问题

问题分析

你当前的过滤器代码遍历了schema.Properties,但从swagger.json输出看,请求体的schema本身要么是string类型(无Properties属性),要么是空对象结构,导致遍历逻辑未触发,修改无效。

修正后的过滤器代码

public class EmptyStringRequestBodyFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.RequestBody == null) return;

        // 遍历所有请求内容类型(如application/json、application/json-patch+json等)
        foreach (var contentEntry in operation.RequestBody.Content)
        {
            var schema = contentEntry.Value.Schema;
            if (schema == null) continue;

            // 处理schema本身为string类型的情况
            if (schema.Type == "string")
            {
                schema.Example = new OpenApiString("{}");
                schema.Default = new OpenApiString("{}");
            }
            // 处理空对象类型的schema
            else if (schema.Type == "object" && schema.Properties.Count == 0)
            {
                schema.Example = OpenApiAnyFactory.CreateFromJson("{}");
            }
        }
    }
}

正确注册过滤器

需在AddSwaggerGen的配置中显式添加该过滤器,而非仅注册服务:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
    // 注册自定义请求体过滤器
    c.OperationFilter<EmptyStringRequestBodyFilter>();
});

额外说明

  • 如果接口原本应接收空对象而非字符串,更合理的做法是将接口参数类型改为object,或定义一个空DTO类(如public class EmptyRequest { }),Swagger会自动识别为{}格式的请求体。
  • 若必须保持参数为string类型,上述过滤器代码会将请求体的示例和默认值替换为{},解决显示问题。

内容的提问来源于stack exchange,提问作者K.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:41:23