【发布时间】:2020-08-28 11:29:48
【问题描述】:
我正在开发一个名为“主项目”的项目。我在那里至少有 10 个不同的小项目,这个项目可能会增长。我对所有这些项目只有一个招摇,因为所有这些项目都只使用一个 dotnet 核心 Web 应用程序来进行泛化。
例如,假设我有名为 SchoolJob 的项目和名为 HospitalJob 的项目。 SchoolJob 有三个不同的端点,分别命名为 GetStudents、TakeStudents、GetPayment 和 HostpitalJob 有两个端点分别命名为 GetDoctors 和 GetNurses。这两个不同的项目将出现在一个像这样招摇的 UI 中:
- ../schooljob/getstudents
- ../schooljob/takestudents
- ../schooljob/getpayment
- ../hospitaljob/getdoctors
- ../hospitaljob/getnurses
我想要做的是在一个 dotnet core web 项目中设置多个不同的 swagger 页面,或者将一个 swagger 分组,以便它们可以在不同的页面/或同一页面上看到,但不是在同一时间。
../mainproject/swagger1/index.html 或 mainproject/swagger/schooljob UI 应该是这样的:
- ../schooljob/getstudents
- ../schooljob/takestudents
- ../schooljob/getpayment
../mainproject/swagger2/index.html 或 mainproject/swagger/hospitaljob UI 应该是这样的
- ../hospitaljob/getdoctors
- ../hospitaljob/getnurses
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
c.SwaggerDoc("schooljob", new OpenApiInfo
{
Version = "schooljob",
Title = "School Job"
});
c.SwaggerDoc("hospitaljob", new OpenApiInfo
{
Version = "hospitaljob",
Title = "Hospital Job"
});
// c.AddSecurityDefinition... and other swagger configurations
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
app.UseSwagger(c =>
{
c.RouteTemplate = "mainproject/swagger/{documentname}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/mainproject/swagger/schooljob/swagger.json", "School Job");
c.SwaggerEndpoint("/mainproject/swagger/hospitaljob/swagger.json", "Hospital Job");
c.RoutePrefix = "mainproject/swagger";
/c second prefix how?
});
}
// SchoolController.cs
[HttpPost("schooljob/getstudents")]
[ApiExplorerSettings(GroupName = "schooljob")]
public JsonResult GetStudents([FromBody]OnaySayfasiId onaySayfasi)
{ ... }
// HospitalController.cs
[HttpPost("hospitaljob/getdoctors")]
[ApiExplorerSettings(GroupName = "hospitaljob")]
public JsonResult GetDoctors([FromBody]OnaySayfasiId onaySayfasi)
{ ... }
顺便说一句,我尝试使用 Api 版本分组,但我又看到了所有这些端点。有什么方法可以做到吗?
【问题讨论】:
-
我认为使用 API 版本控制应该可以完成这项工作,您具体尝试了什么?
-
您是否还尝试在
Startup.cs中多次调用app.UseSwaggerUI(options => { options.RoutePrefix = "swaggerXX" ... })?每次调用都会创建不同的 Swagger 页面? -
我该怎么做?喜欢
mainproject/swagger/schooljob和mainproject/swagger/hospitaljob?尝试了多个SwaggerEndpoint,但没有成功。 -
UI 右上角只有“选择定义”列表,我可以选择版本。但这两个版本具有相同的端点。我只有两个端点有
[ApiExplorerSettings(GroupName = "projectName")],其他端点没有这个。 -
您能否为您的问题添加更多代码,
Startup.cs和您的一些控制器?对调试有很大帮助
标签: .net-core swagger swashbuckle