c# - 如何在 Swagger 中为每个控制器创建一个新地址
问题描述
我有两个控制器叫做TestController
and Test2Controller
。我怎么能大摇大摆地让这两个控制器有 2 个单独的 url,例如TestController
它的地址是
baseurl/docs/test/index.html
和Test2Controller
地址是
baseurl/docs/test2/index.html
测试控制器:
[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "Test")]
public class TestController : ControllerBase
{
[ApiExplorerSettings(IgnoreApi = false)]
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
测试2控制器:
[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "Test2")]
public class Test2Controller : ControllerBase
{
[ApiExplorerSettings(IgnoreApi = false)]
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("Test", new OpenApiInfo());
c.SwaggerDoc("Test2", new OpenApiInfo());
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/Test/swagger.json", "Test");
c.SwaggerEndpoint("/swagger/Test2/swagger.json", "Test2");
});
}
解决方案
没有直接的方法可以实现您提到的 URL 路由。但是,您可以对它们进行分组,并为 2 个不同的控制器提供不同的 Swagger 文档。请按照以下步骤操作:
第 1 步:在 ApiExplorer 设置中对控制器进行分组,如下所示,并给出组名。
''--- Controller 1
[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "test1")]
public class TestController1 : Controller
{
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
''--- Controller 2
[Route("api/[controller]")]
[ApiExplorerSettings(GroupName = "test2")]
public class TestController2 : Controller
{
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
Step2:在startup.cs的ConfigureServices的AddSwaggerGen中添加两个swagger文档
services.AddSwaggerGen(c => {
c.SwaggerDoc("test1", new OpenApiInfo
{
Title = "test1",
Version = "v1"
});
c.SwaggerDoc("test2", new OpenApiInfo
{
Title = "test2",
Version = "v2"
});
});
步骤 3:配置 AddSwaggerUI 端点
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/test1/swagger.json", "test1");
c.SwaggerEndpoint("/swagger/test2/swagger.json", "test2");
});
完成此配置后,当您使用 https://baseurl/swagger 运行 Swagger 文档时,您将在右上角看到 2 个选项来选择定义
您现在可以使用以下 URL 访问控制器特定的 swagger 文档
https://baseurl/swagger/index.html?urls.primaryName=test1 -- test controller1
https://baseurl/swagger/index.html?urls.primaryName=test2 -- test controller2
同样,要访问 Swagger json 文件,请使用以下 URL
https://baseurl/swagger/test1/swagger.json -- test controller1
https://baseurl/swagger/test2/swagger.json -- test controller2
推荐阅读
- angularjs - AngularJS http 多次发帖
- ssh - 通过 ssh 运行星号命令的问题
- javascript - 如何在引导多选中实现 optgroups(淘汰赛绑定)
- ruby-on-rails - 如何使我在 Rails 中的数据库查询方法更高效
- facebook - 创建原生插件来实现官方 Unity Facebook SDK 的缺失功能
- c# - C# 7.0 重载和新的元组返回语法
- scala - Scala:从每一行传递数据帧的元素并在单独的行中取回结果
- c# - C++ 中的调用动作
- javascript - 如何在函数上返回 HTML
- amazon-web-services - ssh 到 EC2 上托管的 docker 容器