问题描述
我正在开发一个名为“主项目”的项目。我在那里至少有10个不同的小项目,这个项目可能会发展。对于所有这些项目,我只有一招,因为所有这些项目仅使用一个dotnet核心Web应用程序进行通用化。
例如,假设我有一个名为SchoolJob
的项目和一个名为HospitalJob
的项目。 SchoolJob
有三个不同的端点,分别名为GetStudents
,TakeStudents
,GetPayment
和HostpitalJob
,有两个端点,分别为GetDoctors
和GetNurses
。这两个不同的项目将在一个大胆的用户界面中显示出来,就像这样:
- ../schooljob/getstudents
- ../schooljob/takestudents
- ../schooljob/getpayment
- ../hospitaljob/getdoctors
- ../hospitaljob/getnurses
我想做的是在一个dotnet核心Web项目中设置多个不同的招摇页面,或将一个招摇者分组,以便它们可以在不同的页面上/或在同一页面上看到,而不是同时出现。
../ 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版本进行分组,但是我又看到了所有这些端点。有什么方法可以做到吗?
解决方法
我看到了您所缺少的,您使用了错误的控制器属性,在这里您可以执行以下操作:
- 在控制器中,必须使用
[ApiVersion]
而不是[ApiExplorerSettings(GroupName = ...)]
属性。组是不同的,我想它们是关于在Swagger页面的同一部分下的端点分组。 - 当方法参数需要版本时,请保持一致。
OpenApiInfo
,SwaggerEndpoint
,ApiVersion
需要相同的字符串,例如schooljob
而不是School Job
。
我想如果您按以下方式更新代码,它应该可以工作:
// Startup.cs
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/mainproject/swagger/schooljob/swagger.json","schooljob");
c.SwaggerEndpoint("/mainproject/swagger/hospitaljob/swagger.json","hospitaljob");
c.RoutePrefix = "mainproject/swagger";
// No need for 2nd route prefix as there is only one Swagger page,// the content of the page gets updated when selecting a different version in the combobox.
});
/* This line may be required in ConfigureServices method,give it a try */
/* services.AddApiVersioning(); */
// SchoolController.cs
[HttpPost("schooljob/getstudents")]
[ApiVersion("schooljob")]
public JsonResult GetStudents([FromBody]OnaySayfasiId onaySayfasi)
{ ... }
希望它能解决您的问题!