【问题标题】:How to implement swagger for odata controllers如何为 odata 控制器实现 swagger
【发布时间】:2018-10-01 09:49:14
【问题描述】:
我在 asp.net 核心应用程序中使用 odata 控制器。现在对于文档,我想使用 swagger。我尝试了很多方法,但没有任何效果。
请建议集成 swagger 需要做什么
【问题讨论】:
-
这是一个已知问题,您可以跟踪此here,如果对您有帮助,您还可以在此链接上查看开发人员尝试的解决方法。
-
标签:
asp.net-core
.net-core
swagger-2.0
aspnetboilerplate
【解决方案1】:
您需要安装the API Explorer for Microsoft ASP.NET Core and OData v4.0,然后查看一些samples 和documentation。
文档中的代码 sn-p:
public void ConfigureServices( IServiceCollection services )
{
// format the version as "'v'major[.minor][-status]"
services.AddMvc();
services.AddVersionedApiExplorer( o => o.GroupNameFormat = "'v'VVV" );
services.AddApiVersioning();
services.AddOData().EnableApiVersioning();
services.AddSwaggerGen(
options =>
{
var provider = services.BuildServiceProvider()
.GetRequiredService<IApiVersionDescriptionProvider>();
foreach ( var description in provider.ApiVersionDescriptions )
{
options.SwaggerDoc(
description.GroupName,
new Info()
{
Title = $"Sample API {description.ApiVersion}",
Version = description.ApiVersion.ToString()
} );
}
} );
}
public void Configure(
IApplicationBuilder app,
VersionedODataModelBuilder modelBuilder,
IApiVersionDescriptionProvider provider )
{
var models = modelBuilder.GetEdmModels();
app.UseMvc( routes => routes.MapVersionedODataRoutes( "odata", null, models ) );
app.UseSwagger();
app.UseSwaggerUI(
options =>
{
foreach ( var description in provider.ApiVersionDescriptions )
{
options.SwaggerEndpoint(
$"/swagger/{description.GroupName}/swagger.json",
description.GroupName.ToUpperInvariant() );
}
} );
}