如何指定 swagger 的默认打开版本?
How can i specify the default opening version of swagger?
我有一个使用 Swagger 作为 API 文档的 C# web API。我使用过 Swashbuckle 软件包。 swagger 环境正在使用我在控制器中指定的多个版本。
今天我介绍了一个仍在开发中的新的未来版本 (1.2)。我想默认在 1.1 版本上打开 swagger,但仍然在右上角的下拉列表中保持正确的排序顺序(例如 v1、v1.1、v1.2)。目前它总是在下拉列表中打开顶部版本。
有人知道怎么做吗?
在 Startup.cs 中配置 Swagger UI 的顺序 - 配置方法决定了下拉列表的顺序。默认情况下,UI 显示与下拉列表中第一个选项对应的规格。
我们可以改变版本的顺序,如下所示,但我不确定是否有任何 属性 来覆盖默认版本,同时保留 UI 中版本的下拉顺序。
在下面的例子中,默认打开v1.1。
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1.1/swagger.json", "V1.1");
c.SwaggerEndpoint("/swagger/v1.0/swagger.json", "V1.0");
c.SwaggerEndpoint("/swagger/v1.2/swagger.json", "V1.2");
}
但是,有一个解决方法:您可以传递查询字符串参数的值 urls.primaryName,以便它默认加载该版本。
https://localhost:5001/swagger/index.html?urls.primaryName=v1.1
(或)
您可以尝试通过注入自定义 javascript 来自定义 Swagger UI,如下所示:
app.UseSwaggerUI(
....
c => c.InjectJavascript(***pass custom javascript here***) )
扩展 Bob 的答案:解决方案是编辑 Properties/launchSettings.json:
"profiles": {
"Command.Broker": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger/index.html?urls.primaryName=v1.1",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:51476/"
},
}
我只是将首页重定向到配置文件中指定的版本。 .net 核心示例
...
string SwaggerStartupVersion = "V2";
...
public void ConfigureApp(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider provider)
{
app.Use(async (context, next) =>
{
var isFrontPage = context.Request.Path.Value == "/index.html" && !context.Request.QueryString.HasValue;
if (isFrontPage)
{
context.Response.Redirect($"/index.html?urls.primaryName={SwaggerStartupVersion}");
return;
}
await next();
});
我有一个使用 Swagger 作为 API 文档的 C# web API。我使用过 Swashbuckle 软件包。 swagger 环境正在使用我在控制器中指定的多个版本。
今天我介绍了一个仍在开发中的新的未来版本 (1.2)。我想默认在 1.1 版本上打开 swagger,但仍然在右上角的下拉列表中保持正确的排序顺序(例如 v1、v1.1、v1.2)。目前它总是在下拉列表中打开顶部版本。
有人知道怎么做吗?
在 Startup.cs 中配置 Swagger UI 的顺序 - 配置方法决定了下拉列表的顺序。默认情况下,UI 显示与下拉列表中第一个选项对应的规格。
我们可以改变版本的顺序,如下所示,但我不确定是否有任何 属性 来覆盖默认版本,同时保留 UI 中版本的下拉顺序。
在下面的例子中,默认打开v1.1。
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1.1/swagger.json", "V1.1");
c.SwaggerEndpoint("/swagger/v1.0/swagger.json", "V1.0");
c.SwaggerEndpoint("/swagger/v1.2/swagger.json", "V1.2");
}
但是,有一个解决方法:您可以传递查询字符串参数的值 urls.primaryName,以便它默认加载该版本。
https://localhost:5001/swagger/index.html?urls.primaryName=v1.1
(或) 您可以尝试通过注入自定义 javascript 来自定义 Swagger UI,如下所示:
app.UseSwaggerUI(
....
c => c.InjectJavascript(***pass custom javascript here***) )
扩展 Bob 的答案:解决方案是编辑 Properties/launchSettings.json:
"profiles": {
"Command.Broker": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger/index.html?urls.primaryName=v1.1",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:51476/"
},
}
我只是将首页重定向到配置文件中指定的版本。 .net 核心示例
...
string SwaggerStartupVersion = "V2";
...
public void ConfigureApp(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider provider)
{
app.Use(async (context, next) =>
{
var isFrontPage = context.Request.Path.Value == "/index.html" && !context.Request.QueryString.HasValue;
if (isFrontPage)
{
context.Response.Redirect($"/index.html?urls.primaryName={SwaggerStartupVersion}");
return;
}
await next();
});