当前位置: 首页 > 知识库问答 >
问题:

在.NET核心中按项目分组Swagger

邰钟展
2023-03-14

我正在做一个我命名为“主项目”的项目。我至少有10个不同的小项目在那里,这个项目可能会增长。我对所有这些项目只有一个自信,因为所有这些项目都只使用一个dotnet核心web应用程序来进行推广。

例如,假设我有一个名为schooljob的项目和一个名为hospitaljob的项目。SchoolJob有三个不同的endpoint,分别名为GetStudentsTakeStudentsGetPaymentsHostPitalJobGetDoctors。这两个不同的项目将出现在一个大摇大摆的UI中,如下所示:

 - ../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版本分组,但我再次看到了所有这些endpoint。有什么方法可以做到这一点吗?

共有1个答案

罗安和
2023-03-14

我知道您遗漏了什么,您使用了错误的控制器属性,下面是您可以做的:

  • 在控制器中,必须使用[ApiVersion]而不是[apiExplorerSettings(GroupName=...)]属性。组是不同的,我想它们是关于在Swagger页面中将endpoint分组在同一节下。
  • 当方法参数需要版本时,要保持一致。openapiinfoswaggendpointapiversion需要相同的字符串,例如schooljob,而不是schooljob.

我想如果您按以下方式更新代码,它应该会起作用:

// 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)
{ ... }
 类似资料:
  • 我有一个<代码>。NET Core项目我试图运行Fortify扫描。据我所知,目前还没有VS2017 Fortify插件可用,但我很好奇是否可以使用围绕插件工作,仍然执行Fortify扫描?如果是这样,我怎么能把它合并到我的清洁、翻译和扫描命令中? 当前Fortify版本:

  • 我正在尝试运行以下powerShell脚本,以便使用Fortify扫描我的解决方案(.NET Core 2.0): 在我的本地机器上一切都很好。 但当我试图在服务器上运行它作为TeamCity(TeamCity Enterprise 2018.2.1(build 61078))中的构建步骤时,我遇到了一个错误: 我在本地和服务器中使用相同版本的Fortify(Fortify静态代码分析器17.20

  • .NET核心和ASP.NET核心到底有什么区别?

  • null Visual Studio试图加载选定的模板,然后该模板突然消失,窗口显示选中联机帮助、调试或关闭该模板的对话框。接下来,visual studio将重新引导到起始页。 只有当我选择任何.NET核心或.NET标准项目模板时,才会发生这种情况。非常感谢你事先的帮助。

  • 抱歉,问题太简单了。我正在使用b2c扩展,无法找到定义的定义。有人能告诉我在哪里搜索那些文件吗。

  • 如何在.NET核心库项目中将一个类注入另一个类?在API项目中的StartUp类ConfigureServices中,我应该在哪里配置DI?