文章

.NET Core前后端分离(1) - Swagger的使用

在前后端分离过程中,API文档是非常重要的,在项目搭建的第一步,我们使用Swagger来实现这一点

引入Nuget包

在项目中安装Swashbuckle.AspNetCore.SwaggerGenSwashbuckle.AspNetCore.SwaggerUI

配置服务

Startup.cs文件的ConfigureServices函数中添加服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 类中定义常量,方便后续编辑
private const string ApiVersion = "V1.0";

// ConfigureServices函数内添加代码
services.AddSwaggerGen(setup =>
{
    // 设置Swagger文档的名称,描述信息等
    setup.SwaggerDoc(ApiVersion, new OpenApiInfo
    {
        Version = ApiVersion,
        Title = "后端API说明文档",
        Description = "具体描述见各API详情",
        Contact = new OpenApiContact { Name = "HANABI", Email = "Narancia86@outlook.com", Url = new Uri("https://colasaikou.com/") },
        License = new OpenApiLicense { Name = "HANABI", Url = new Uri("https://colasaikou.com/") }
    });

    // 设置API的排序规则
    setup.OrderActionsBy(description => description.RelativePath);

});

Startup.cs文件的Configure函数中启动HTTP管道中间件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint($"/swagger/{ApiVersion}/swagger.json", ApiVersion);

        // 在launchSettings.json把launchUrl设置为空,表示程序启动时访问根域名,并且在这里把Swagger页面路由前缀设置为空,即可在API根域名访问Swagger界面
        c.RoutePrefix = "";
    });

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

配置API注释

此时启动API已经可以看到Swagger界面了,但是可以看到,此时这些API是没有注释的,现在进行最后一步,给他们加上注释

在项目名称处点击右键-属性-生成,勾选上XML文档文件,并设置好文档的相对路径,对项目进行生成,发现项目下已经出现了对应的注释XML文档,在错误列表中会出现很多警告,根据警告类型同样在项目的属性-生成中添加取消显示警告1591

此时,在Controller代码中加上注释,并在ConfigureServices函数的Swagger服务设置中添加内容:

1
2
3
// 设置接口注释信息
var xmlPath = Path.Combine(AppContext.BaseDirectory, "Hanabi.Blog.xml");
setup.IncludeXmlComments(xmlPath, true);

重新生成项目并运行,此时可以看到API说明中已经出现了添加的注释内容

如果想忽略某个API,使其不显示,在Controller或者Action上方加上[ApiExplorerSettings(IgnoreApi = true)]特性即可

本文由作者按照 CC BY 4.0 进行授权