代码之家  ›  专栏  ›  技术社区  ›  Malik Rizwan

外部包中的模型以夸张的文档形式显示

  •  9
  • Malik Rizwan  · 技术社区  · 8 年前

    我正在制作一个夸张的文档,并添加了一个外部包” 点头 “并在模型中用作我的属性的类型 public LocalDateTime Date { get; set; } 模型来自 点头 文件中显示包。 请看截图中的模特,突出显示的是来自 点头 包裹。 为什么要大摇大摆地把它包含在文档中,以及如何从文档中排除外部包。 enter image description here 提前谢谢。

    2 回复  |  直到 8 年前
        1
  •  7
  •   GetFuzzy    7 年前

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

    但是,swashbuck允许您关闭模型扩展。下面你可以看到我是如何设置我的swashbleck配置的。设置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();
        }
    
        2
  •  4
  •   Malik Rizwan    7 年前

    我不能用 DefaultModelExpandDepth(0); 因为这将隐藏我自己的模型,所以我将其用作模型中的类型。 所以,我经常检查哪些类型来自外部包,并像下面这样排除它们。

    添加 滤波器

    public class RemoveVerbsFilter : IDocumentFilter
    {
        public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
        {
            swaggerDoc.Definitions.Remove("LocalDateTime");
            swaggerDoc.Definitions.Remove("CalendarSystem");
            swaggerDoc.Definitions.Remove("Era");
            swaggerDoc.Definitions.Remove("LocalTime");
            swaggerDoc.Definitions.Remove("LocalDate");
        }
    }
    

    加载项启动类 配置服务 方法

        services.AddSwaggerGen(c =>
            {
                c.DocumentFilter<RemoveVerbsFilter>();
            });