首页 > 编程语言 >ASP.NET Core 接口文档解决方案(swagger)

ASP.NET Core 接口文档解决方案(swagger)

时间:2023-05-19 18:45:20浏览次数:48  
标签:Core ASP Name 接口 文档 var new NET public

api文档解决方案很多,先介绍我用过的两种方案:

比较项 Swagger Showdoc
官网 帮助说明--ShowDoc
知名度 较大、net6 官方推荐 国产
在线测试 支持 不支持
文档定义方式 注释为主 注释为主
生成过程 自动根据接口参数和返回类型生成相关说明。 接口文档的一切都需在注释中自定义。手写内容较多,但能使文档更清楚直观。
依赖和文档更新 依附于接口程序,共生。 可通过一些简单操作,实现一键快速更新。像是个单独网站。
下载分享 支持下载 支持下载。可分享指定接口,或整个项目接口,且支持网址密码分享。有成员概念。

个人目前偏爱 showdoc,虽然它不能在线测试以及需要编写较多的注释,但真的好用。参考:帮助说明--ShowDoc

Swagger 介绍

Swagger (OpenAPI) 是一个与语言无关的规范,用于描述 REST API。

简而言之:

  • OpenAPI 是一种规范。
  • Swagger 是一种使用 OpenAPI 规范的工具。 例如,OpenAPIGenerator 和 SwaggerUI。

Swagger UI 提供了基于 Web 的 UI,它使用生成的 OpenAPI 规范(json)提供有关服务的信息。Web UI 如下所示:

Swagger UI

在net 6中的使用Swagger

入门教程

在ASP.NET Core中的使用步骤,参考(重要,请必读跟着做):
Get started with Swashbuckle and ASP.NET Core | Microsoft Docs

简单看看跟着操作下就好,适合入门了解,但挺鸡肋。

实际应用保姆级教程

先引用netget包:

  • Swashbuckle.AspNetCore
  • Swashbuckle.AspNetCore.Annotations
  • IGeekFan.AspNetCore.Knife4jUI //这个提供更美观好用的页面,是一热心网友做的开源优质皮肤。

编辑项目文件

打开接口的项目文件,设置要生成接口文档描述:

image-20230519174427712

<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DocumentationFile>D:\AMyProject\web-idasheng\WebApi\ApiDocs\WebApi.xml</DocumentationFile>

其中,DocumentationFile 节点的路径可自定义,这个路径很重要。

然后点击重新生成解决方案。这时会看到生成的该xml文件,然后选中右击,点击【属性】,在“复制到输出目录”项,选择【始终复制】。以便发布时能带上该文件。


注意:对接口入参或返回数据中,涉及到的模型类,要在他们所在的项目,也要进行上面这样的设置,以便接口文档自动应用相关属性的注释说明。

image-20230519175018630

这些模型类,要加上属性的注释,后面它就是接口文档的字段说明。像这样:

image-20230519182724582

设置分组

一个软件系统的接口文档有很多,需要分组(或分版本),以便管理和查看,这里可以先建一个分组信息类:

public class ApiGroupInfo
    {
        public const string 开发测试= "开发测试";
        public const string 公开服务= "公开服务";
        public const string 官网相关= "官网相关";
        public const string 其它= "其它";
    }

然后在每个控制器中应用分组标识,多个控制器可以共用一个分组,就像这样:

image-20230519175639939

[Produces("application/json")]
[ApiExplorerSettings(GroupName = ApiGroupInfo.公开服务)]

具体的方法,主要就是写注释啦,swagger根据注释信息,生成文档描述。大概是下面这么个形式:

/// <summary>
        /// 获取应用信息
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetAppInfo()
        {
            return new JsonResult(_sysConfig.AppInfo);
        }

        /// <summary>
        /// 获取中国传统色
        /// </summary>
        /// <param name="key">访问key</param>
        /// <returns></returns>
        [HttpGet]
        [ProducesDefaultResponseType(typeof(IEnumerable<Public_CnColors>))]
        public async Task<string> GetCnColors(string key)
        {
            var data = await new BasicCRUD<Public_CnColors>().GetList();

            return EachData.Success(data);
        }

        /// <summary>
        /// 获取中国传统色2
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<EachData<IEnumerable<Public_CnColors>>> GetCnColorsV2(string key)
        {
            var data = await new BasicCRUD<Public_CnColors>().GetList();

            return EachData<IEnumerable<Public_CnColors>>.Success(data);
        }

服务注册

下面代码,根据上面提到的分组类,遍历每个组信息,以便在接口文档形成分组下拉菜单。

然后对前文设置的xml文档进行了使用。

最后还配置了jwt bearer 授权,以便接口调试时携带该信息。

#region 服务注册:接口文档Swagger
services.AddEndpointsApiExplorer();
services.AddSwaggerGen(options =>
{
    var desc = "请熟读并背诵接口文档。 ";
    var constantProperties = typeof(ApiGroupInfo)
    .GetFields(BindingFlags.Public | BindingFlags.Static)
    .ToArray();
    foreach (var field in constantProperties)
    {
        options.SwaggerDoc(field.Name, new OpenApiInfo
        {
            Version = field.Name,
            Title = field.Name,
            Description = desc
        });

    }
    var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlApiPath = Path.Combine(AppContext.BaseDirectory, $"ApiDocs/{Assembly.GetExecutingAssembly().GetName().Name}.xml");
    var xmlEntityPath = Path.Combine(AppContext.BaseDirectory, "ApiDocs/Data.Entity.xml");
    var xmlDtoPath = Path.Combine(AppContext.BaseDirectory, "ApiDocs/Data.Dto.xml");
    options.IncludeXmlComments(xmlApiPath, true);
    options.IncludeXmlComments(xmlEntityPath, true);
    options.IncludeXmlComments(xmlDtoPath, true);
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Description = "Value: Bearer {token}",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        Scheme = "Bearer",
        BearerFormat = "JWT"
    });
    options.AddSecurityRequirement(new OpenApiSecurityRequirement()
    {
      {
        new OpenApiSecurityScheme
        {
          Reference = new OpenApiReference
          {
            Type = ReferenceType.SecurityScheme,
            Id = "Bearer"
          },Scheme = "oauth2",Name = "Bearer",In = ParameterLocation.Header,
        },new List<string>()
      }
    });
}); 
#endregion

中间件配置

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();

    app.UseSwagger();
    //app.UseSwaggerUI();//使用swagger默认的皮肤样式
    app.UseKnife4UI(c =>
    {
        c.RoutePrefix = String.Empty ; // serve the UI at root
        var constantProperties = typeof(ApiGroupInfo)
    .GetFields(BindingFlags.Public | BindingFlags.Static)
    .ToArray();
        foreach (var field in constantProperties)
        {
            c.SwaggerEndpoint($"/swagger/{field.Name}/swagger.json", $"{field.Name}");
        }
    });
}

这样,它就基本OK了,注意事项:

  • 对接口action,最好标注[HttpGet] [HttpPost]
  • 如果你的action返回类型是string,但其实是返回的是某个类型,那需要对action应用[ProducesDefaultResponseType(typeof(Product))]这个特性,来自动生成对设置类型的字段描述(来自注释)。

运行查看

至此,基本完成了,F5运行,路径定位到根目录,查看效果如下:

image-20230519180916355

查看分组、在线测试,都还挺方便:

image-20230519181027889

image-20230519181114150

ShowDoc (推荐)

Showdoc简介,https://www.showdoc.com.cn/help/1385767280275683

使用程序注释自动生成API文档 https://www.showdoc.com.cn/page/741656402509783

优点

  • 使用简单,在接口程序无需做任何代码配置。完全可自定义请求参数、返回参数、返回数据示例。
  • 可生成带访问密码的共享连接。
  • 可转化成Word文档。
  • 免费。(5人以下团队免费)。
  • 接口文档不依赖接口站点程序。可以自建showdoc服务站点或在官网自建接口文档项目。

缺点

  • 高度依赖方法注释,每个请求参数或返回参数都需要写清楚。
  • 另外暂时无法通过文档直接请求测试接口。

image-20220919150446780

image-20220919150646561


更新于:2023.5.19

标签:Core,ASP,Name,接口,文档,var,new,NET,public
From: https://www.cnblogs.com/idasheng/p/17416026.html

相关文章

  • 一个.Net开发的功能强大、易于使用的流媒体服务器和管理系统
    推荐一个视频管理系统,非常适合个人或者公司打造视频网站。项目简介这是基于.NetCore开发的,跨平台的开源项目;支持多种音视频格式,如MP3、MP4、AVI、WMV、FLV等;支持本地管理与远程管理,让管理员可以轻松的管理视频资源。而且该项目还提供多平台的客户端,支持Web、桌面、Liunx、安卓......
  • 基于ResNet网络架构训练图像分类模型
    目录1.数据预处理(1)导包(2)数据读取(3)制作数据(4)读取标签对应的实际名字(5)展示数据2.构建网络(1)加载已有网络模型(2)选择需不需要冻住哪些层(3)重新加入全连接层传入自己的分类数(4)网络搭建结果3.训练自己的全连接层4.训练所有层5.测试网络效果(1)加载训练好的模型(2)测试数......
  • 记一次将 .netcore 项目用 IIS 进程调试
    环境:win10,VisualStudio2022 在.netframework年代,我们都习惯用iis进程调试代码。因为用F5调试代码效率太低下。现在.netcore时代,这种好习惯可不能丢。简单记录一下,我的操作过程。 1.首先用IIS挂载网站,看能不能把发布的好的网站跑起来2.其次用IIS增加网站,......
  • 北京.NET线下技术沙龙倒计时一天
    时间:2023年5月20日13:30-18:00地点:北京市海淀区中关村大街32号蓝天科技综合楼一层(中关村智能制造创新中心)(距海淀黄庄地铁站100米)【地下停车场可停车】.NET技术沙龙活动与你不见不散点击链接参加活动:http://hdxu.cn/SUglm活动详情......
  • .NET入门相关学习
    今日任务:制作一个可以对数据库增删改的简单信息系统。 利用官方教程做一个简单的学习。制作步骤整理:一、创建ASP.NETCoreWeb应用项目。二、更改Pages/Shared/_Layout.cshtml设置网站页眉、页脚和菜单,用于之后新建功能页面的跳转。1<ulclass="navbar-navflex-grow-......
  • 2023最新OneTool多平台助手程序源码
    2023最新OneTool多平台助手程序源码开心可用版本:https://download.csdn.net/download/mo3408/87799108OneTool 是一款功能强大的多平台助手,目前最新版本为199911(1.9.1)。除此之外,该应用程序还拥有其他好玩的功能,等着您们来搭建测试。可以帮助用户快速完成各种任务。例如网......
  • airasia Superapp × HMS Core:便捷出行,悦享全程
    2023年5月9日-5月11日,HUAWEIP60系列及旗舰产品发布会在欧洲德国、中东非阿联酋、亚太马来西亚、拉美墨西哥陆续举办,为消费者带来高端影像旗舰HUAWEIP60Pro及系列全场景智能新品。其中在亚太站,还传递了一个重要消息:2023年6月30日之前,购买HUAWEIP60系列及折叠旗舰HUAWEIMateX3......
  • 使用MASA Stack+.Net 从零开始搭建IoT平台 第四章 4.2使用时序库存储上行数据
    目录前言分析实施步骤时序库的安装解决playload没有时间戳问题代码编写测试总结前言我们可以将设备上行数据存储到关系型数据库中,我们需要两张带有时间戳的表(最新数据表和历史数据表),历史数据表存储所有设备上报的数据,最新数据表需要存储设备最新一条上报数据,这条最新数据相当......
  • 如何部署ASP.NET Core到Linux服务器
    #如何部署ASP.NETCore到Linux服务器我们开发的最终目的,是将开发后的东西发布网络上,以便自己及其他人使用。本篇博客介绍如果在linux上部署ASP.NETCore应用,使用nginx+systemd来管理我们的应用。##准备-Ubuntu20.04-Nginx-DOTNETSDK或Runtime##安装-......
  • 基于 .NET的FluentValidation验证教程
    虽然FluentValidation是一个非常强大的验证框架,但针对该框架的中文资料并不完善,零度在学习的过程中,将官方文档进行了翻译,由此产生本文,可供参阅。要使用验证框架,需要在项目中添加对FluentValidation.dll的引用,支持netstandard2.0库和.NET4.5平台,支持.NETCore平台,最简......