asp.net-core - 外部包中的模型显示在 swagger 文档中
问题描述
我正在处理 swagger 文档,并添加了一个外部包“ NodaTime ”,并用作模型中我的属性的类型
public LocalDateTime Date { get; set; }
,来自NodaTime包的模型显示在文档中。请查看屏幕截图中的模型,突出显示来自NodaTime包。为什么 Swagger 将其包含在文档中以及如何从文档中排除外部包。
提前致谢。
解决方案
我猜他们出现是因为你暴露了一个使用 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();
}
推荐阅读
- mysql - 显示带有希伯来元音的单词的 MySQL 结果?
- rxjs - 在 RxJS 中重用 pipeable 操作符
- vuejs2 - 如何限制用户进入管理区域vue router guard
- angular - 将自定义 AdminLTE scss 文件集成到 Angular 项目中
- c# - 将 XElement 转换为 DataSet 并在 DataGridView 中显示时将命名空间保留在列中
- typescript - 空字符串在 React Native 应用程序中呈现为未定义
- entity-framework - 具有特定表的 Scaffold-DbContext 多个 Schema
- json - 如何在 Swif 5 IOS 中发送带有 json 字符串作为参数的帖子并通过 Alamofire 或 URLSession 发布
- group-by - 由 Chunks 提供的 Solr 响应组
- javascript - 使用 cross-env 将 CLI 参数传递给 NPM 脚本