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

NET8 Web API项目:如何在Swagger中展示无类型输入的JSON Schema

解决方案

首选方案:使用NJsonSchema.Swashbuckle NuGet包

这个是NJsonSchema官方提供的Swagger集成工具,能直接把你的JSON Schema同步到OpenAPI规范里,操作简单。

  1. 安装NuGet包
    包管理器控制台执行:

    Install-Package NJsonSchema.Swashbuckle
    

    或.NET CLI:

    dotnet add package NJsonSchema.Swashbuckle
    
  2. 配置Swagger服务
    在Program.cs的Swagger配置中,添加NJsonSchema扩展并注册你的验证Schema:

    builder.Services.AddSwaggerGen(c =>
    {
        // 启用NJsonSchema与Swagger的集成
        c.AddNJsonSchema();
    
        // 替换成你实际的JsonSchema实例(比如预先从文件加载或代码生成的)
        var yourValidationSchema = _jsonSchema;
        // 将Schema注册到Swagger的组件库中
        c.SchemaGenerator.GenerateSchema(yourValidationSchema.TypeName, c.SchemaRepository);
    
        // 添加自定义过滤器绑定Schema到目标Action
        c.OperationFilter<UploadActionRequestBodyFilter>();
    });
    
  3. 自定义过滤器绑定Schema到Upload Action
    创建过滤器类,手动将你的验证Schema关联到Upload接口的请求体:

    public class UploadActionRequestBodyFilter : IOperationFilter
    {
        private readonly JsonSchema _validationSchema;
    
        public UploadActionRequestBodyFilter(JsonSchema validationSchema)
        {
            _validationSchema = validationSchema;
        }
    
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            // 匹配你的Upload Action
            if (context.ApiDescription.ActionDescriptor.RouteValues["action"] == "Upload" &&
                context.ApiDescription.HttpMethod == HttpMethod.Post.Method)
            {
                // 将NJsonSchema转换为OpenApiSchema格式
                var openApiSchema = _validationSchema.ToOpenApiSchema();
                // 配置请求体
                operation.RequestBody = new OpenApiRequestBody
                {
                    Content = new Dictionary<string, OpenApiMediaType>
                    {
                        ["application/json"] = new OpenApiMediaType
                        {
                            Schema = openApiSchema
                        }
                    },
                    Required = true
                };
            }
        }
    }
    

    记得在Program.cs里注册过滤器时注入你的JsonSchema实例:

    builder.Services.AddSingleton<IOperationFilter>(sp => 
        new UploadActionRequestBodyFilter(sp.GetRequiredService<JsonSchema>()));
    

替代方案:手动编写过滤器(无需额外NuGet)

如果不想新增依赖,直接用NJsonSchema自带的ToOpenApiSchema()方法实现自定义过滤器,步骤和上面的过滤器部分一致,只是不需要安装NJsonSchema.Swashbuckle包。

注意事项

  • 确保你的JsonSchema实例已正确加载(比如从文件读取、代码生成),且包含完整的验证规则。
  • 若Schema是动态生成的,需保证在Swagger配置完成前完成Schema的初始化。

内容的提问来源于stack exchange,提问作者aleha_84

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:05:04