• ASP.NET Core WebApi使用Swagger生成API说明文档【xml注释版】


    ⒈新建ASP.NET Core WebAPi项目

    ⒉添加 NuGet 包

    Install-Package Swashbuckle.AspNetCore

    ⒊Startup中配置

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 using Microsoft.AspNetCore.Builder;
     6 using Microsoft.AspNetCore.Hosting;
     7 using Microsoft.AspNetCore.Mvc;
     8 using Microsoft.Extensions.Configuration;
     9 using Microsoft.Extensions.DependencyInjection;
    10 using Microsoft.Extensions.Logging;
    11 using Microsoft.Extensions.Options;
    12 using Swashbuckle.AspNetCore.Swagger;
    13 
    14 namespace SwaggerXmlDemo
    15 {
    16     public class Startup
    17     {
    18         public Startup(IConfiguration configuration)
    19         {
    20             Configuration = configuration;
    21         }
    22 
    23         public IConfiguration Configuration { get; }
    24 
    25         // This method gets called by the runtime. Use this method to add services to the container.
    26         public void ConfigureServices(IServiceCollection services)
    27         {
    28             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    29 
    30             //注册Swagger生成器,定义一个和多个Swagger 文档
    31             services.AddSwaggerGen(option =>
    32             {
    33                 //配置第一个Doc
    34                 option.SwaggerDoc("v1", new Info
    35                 {
    36                     Version = "v1",
    37                     Title = "My API_1",
    38                     Description = "Document Api",
    39                     Contact = new Contact
    40                     {
    41                         Name = "fanqi",
    42                         Email = "fanqisoft@163.com",
    43                         Url = "https://www.coreqi.cn"                   
    44                     }
    45                 });
    46             });
    47         }
    48 
    49         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    50         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    51         {
    52             if (env.IsDevelopment())
    53             {
    54                 app.UseDeveloperExceptionPage();
    55             }
    56 
    57             //启用中间件服务生成Swagger作为JSON终结点
    58             app.UseSwagger();
    59 
    60             //启用中间件服务对swagger-ui,指定Swagger JSON终结点
    61             app.UseSwaggerUI(c =>
    62             {
    63                 c.SwaggerEndpoint("/swagger/v1/swagger.json", "DemoAPI V1");
    64                 //c.RoutePrefix = "swagger";  //默认
    65                 c.RoutePrefix = string.Empty;
    66             });
    67 
    68             app.UseMvc();
    69         }
    70     }
    71 }

    ⒋添加注释信息

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 
     6 namespace SwaggerXmlDemo.Models
     7 {
     8     /// <summary>
     9     /// 用户实体类
    10     /// </summary>
    11     public class User
    12     {
    13         /// <summary>
    14         /// 用户主键Id
    15         /// </summary>
    16         /// <example>1</example>
    17         public int id { get; set; }
    18         /// <summary>
    19         /// 用户名
    20         /// </summary>
    21         /// <example>fanqi</example>
    22         public string username { get; set; }
    23         /// <summary>
    24         /// 用户密码
    25         /// </summary>
    26         /// <example>admin</example>
    27         public string password { get; set; }
    28         /// <summary>
    29         /// 用户年龄
    30         /// </summary>
    31         /// <example>25</example>
    32         public int? age { get; set; }
    33         /// <summary>
    34         /// 用户邮箱
    35         /// </summary>
    36         /// <example>fanqisoft@163.com</example>
    37         public string email { get; set; }
    38     }
    39 }
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 using Microsoft.AspNetCore.Http;
     6 using Microsoft.AspNetCore.Mvc;
     7 using SwaggerXmlDemo.Models;
     8 
     9 namespace SwaggerDemo.Controllers
    10 {
    11     /// <summary>
    12     /// 用户Api控制器
    13     /// </summary>
    14     [Route("api/[controller]")]
    15     [ApiController]
    16     public class UserController : ControllerBase
    17     {
    18         /// <summary>
    19         /// 获取系统用户列表
    20         /// </summary>
    21         /// <remarks>
    22         /// Demo
    23         /// Get /api/user/get
    24         /// </remarks>
    25         /// <returns>系统用户列表</returns>
    26         /// <response code="201">返回用户列表</response>
    27         /// <response code="401">没有权限</response>
    28         [HttpGet("get")]
    29         [ProducesResponseType(201)]
    30         [ProducesResponseType(401)]
    31         public IList<User> GetUsers()
    32         {
    33             return new List<User>
    34             {
    35                 new User{ id = 1,username = "fanqi",password = "admin",age = 25,email = "fanqisoft@163.com"},
    36                 new User{ id = 2,username = "gaoxing",password = "admin",age = 22,email = "gaoxing@163.com"}
    37             };
    38         }
    39 
    40         /// <summary>
    41         /// 新建用户
    42         /// </summary>
    43         /// <param name="user">新建用户信息</param>
    44         /// <returns>是否创建成功信息</returns>
    45         [HttpPost("add")]
    46         public IActionResult CreateUser([FromForm] User user)
    47         {
    48             return Ok();
    49         }
    50     }
    51 }

    ⒋启用XML注释

      1.右键单击“解决方案资源管理器”中的项目,然后选择“属性”

      2.勾选“生成”选项卡“输出”部分的“XML 文档文件”框

    右键生成的XML文件,选择属性。修改“复制到输出目录”为“始终复制”。

    启用 XML 注释后会为未记录的公共类型和成员提供调试信息将会出现很多CS1591警告信息。直接无视即可。

    警告   CS1591	缺少对公共可见类型或成员“xxxxx”的 XML 注释 指定了 /doc 编译器选项,但是一个或多个构造没有注释。

    如果有强迫症,可以按照下图所示进行取消

    注意上面生成的xml文档文件的路径,

     注意:

    ​ 1.对于 Linux 或非 Windows 操作系统,文件名和路径区分大小写。 例如,“SwaggerDemo.xml”文件在 Windows 上有效,但在 CentOS 上无效。

    ​ 2.获取应用程序路径,建议采用Path.GetDirectoryName(typeof(Program).Assembly.Location)这种方式或者·AppContext.BaseDirectory这样来获取

    ⒌为 Swagger JSON和UI设置xml文档注释路径

     1         // This method gets called by the runtime. Use this method to add services to the container.
     2         public void ConfigureServices(IServiceCollection services)
     3         {
     4             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
     5 
     6             //注册Swagger生成器,定义一个和多个Swagger 文档
     7             services.AddSwaggerGen(option =>
     8             {
     9                 //配置第一个Doc
    10                 option.SwaggerDoc("v1", new Info
    11                 {
    12                     Version = "v1",
    13                     Title = "My API_1",
    14                     Description = "Document Api",
    15                     Contact = new Contact
    16                     {
    17                         Name = "fanqi",
    18                         Email = "fanqisoft@163.com",
    19                         Url = "https://www.coreqi.cn"                   
    20                     }
    21                 });
    22 
    23                 // 为 Swagger JSON and UI设置xml文档注释路径
    24                 //var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
    25                 //var xmlPath = Path.Combine(basePath, "SwaggerXmlDemo.xml");
    26                 var filePath = Path.Combine(System.AppContext.BaseDirectory, "SwaggerXmlDemo.xml");
    27                 option.IncludeXmlComments(filePath);
    28             });
    29         }

    ⒍查看效果

  • 相关阅读:

    每日小练习
    完数
    6.13的练习
    字典
    sql server多条记录同时插入一张表
    sql server从表到表——复制,备份
    Bootstrap关于row
    Bootstrap 关于标签,徽章,巨幕,页头,缩略图,自定义内容的使用
    Bootstrap 关于分页的使用
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10957577.html
Copyright © 2020-2023  润新知