.Net Core中按项目对Swagger进行分组

问题描述

我正在开发一个名为“主项目”的项目。我在那里至少有10个不同的小项目,这个项目可能会发展。对于所有这些项目,我只有一招,因为所有这些项目仅使用一个dotnet核心Web应用程序进行通用化。

例如,假设我有一个名为SchoolJob的项目和一个名为HospitalJob的项目。 SchoolJob有三个不同的端点,分别名为GetStudentsTakeStudentsGetPaymentHostpitalJob,有两个端点,分别为GetDoctorsGetNurses。这两个不同的项目将在一个大胆的用户界面中显示出来,就像这样:

 - ../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页面的同一部分下的端点分组。
  • 当方法参数需要版本时,请保持一致。 OpenApiInfoSwaggerEndpointApiVersion需要相同的字符串,例如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)
{ ... }

希望它能解决您的问题!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...