首页 > 解决方案 > 外部包中的模型显示在 swagger 文档中

问题描述

我正在处理 swagger 文档,并添加了一个外部包“ NodaTime ”,并用作模型中我的属性的类型 public LocalDateTime Date { get; set; } ,来自NodaTime包的模型显示在文档中。请查看屏幕截图中的模型,突出显示来自NodaTime包。为什么 Swagger 将其包含在文档中以及如何从文档中排除外部包。 在此处输入图像描述 提前致谢。

标签: asp.net-coreswaggerswagger-ui

解决方案


我猜他们出现是因为你暴露了一个使用 NodaTime 类型的对象。Swashbuckle / Swagger 正在显示整个对象图......如果您的模型使用这些模型,则无法关闭第三方的类似功能。如果你在 github 上查看中的代码,你可以看到 Swashbuckle 对几个基类库原语进行了特殊处理。方法是CreatePrimitiveSchema(),LocalDateTime不在case语句中。因此,作为解决此问题的方法,您可以分叉 Swashbuckle 并添加 NodaTime 类型。这可能不值得。

但是,Swashbuckle 允许您关闭模型扩展。下面你可以看到我的 Swashbuckle 配置设置。设置 DefaultModelsExpandDepth(-1) 将隐藏它们。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, DataGraphContext db) {
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        } else {
            app.UseHsts();
        }

        app.UseSwagger();

        app.UseSwaggerUI(c => {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
            c.DefaultModelExpandDepth(0);
            c.DefaultModelsExpandDepth(-1);
        });

        app.UseAuthentication();

        app.UseExceptionHandling();
        app.UseCors("AllowSpecificOrigins");
        app.UseHttpsRedirection();
        app.UseMvc();
    }

推荐阅读