测试/生产环境的BUG

这里更新一下在本地调试正常,在INT/PROD上抛错,错误信息为:

/**/.xml(Swagger json file) 文件找不到,在startup 里builder 的时候抛出错误。

解决方案:

编辑.csproj文件,修改输出路径,

  1. <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
  2. <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\win7-x64\ChatBotApi.XML</DocumentationFile>
  3. </PropertyGroup>
  4. <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  5. <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\win7-x64\ChatBotApi.XML</DocumentationFile>
  6. </PropertyGroup>
  7. <Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
  8. <ItemGroup>
  9. <DocFile Include="bin\$(Platform)\$(Configuration)\$(TargetFramework)\win7-x64\*.xml" />
  10. </ItemGroup>
  11. <Copy SourceFiles="@(DocFile)" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="false" />
  12. </Target>

也就是说,让环境自己选择环境变量,保证local/Int/Prod的输出路径都是对的,这样就可以将.xml文件根据环境注入到swagger中。

前言

最近写了好多Web api, 说太乱了,要整理一下,使用Swagger方式生成对应的api说明文档。

花了半天的时间,在这里记录和分享一些过程和遇到的问题。

遇到的主要问题:

1.localhost:9040/swagger/ not found

2.http://localhost:9040/swagger界面可以打开,但是can't read json file.

1.引用

这里引用了三个库,都是在Nuget上安装:

1.Microsoft.AspNetCore.StaticFiles, Version="2.0.3" , 这个package提供UI显示相关服务

2.Swashbuckle.AspNetCore, Version="2.4.0"

3.Swashbuckle.AspNetCore.SwaggerUi, Version="2.4.0"

2.打开startup.cs文件

  1. using Swashbuckle.AspNetCore.Swagger;

在ConfigureServices集合中注入AddSwaggerGen:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMvc();
  4. // Enable CORS
  5. services.AddCors();
  6. //Inject Swagger
  7. services.AddSwaggerGen(c =>
  8. {
  9. c.SwaggerDoc("v1", new Info { Title = "MyApi", Version = "v1" });
  10. // Set the comments path for the Swagger JSON and UI.
  11. var xmlPath = Path.Combine(AppContext.BaseDirectory, "ChatBotApi.XML");
  12. c.IncludeXmlComments(xmlPath);
  13. });
  14. }

在Configure中启用中间件,允许Swagger提供服务生成json文档以及UI:

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. else
  8. {
  9. app.UseExceptionHandler("/Home/Error");
  10. }
  11. app.UseMvc(routes =>
  12. {
  13. routes.MapRoute(
  14. name: "default",
  15. template: "{controller}/{action=Index}/{id?}");
  16. });
  17. app.UseStaticFiles();
  18. // Enable middleware to serve generated Swagger as a JSON endpoint.
  19. app.UseSwagger(c => { c.RouteTemplate = "swagger/{documentName}/swagger.json"; });
  20. // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
  21. // specifying the Swagger JSON endpoint.
  22. app.UseSwaggerUI(c =>
  23. {
  24. //c.RoutePrefix = "swagger/ui";
  25. c.SwaggerEndpoint("v1/swagger.json", "ChatBotApi");
  26. });
  27. }

3.设置XML注释

在 Visual Studio 中右击项目并且选择 Properties 在 Output Settings 区域下面点击 XML Documentation file 。

这时候编译项目,会出现很多warning,提示api没有注释,在每个Api controller上方,连续输入三个'/',即可将api的对应信息补充完整,要给每个Api route加上 http的请求方式。

在各个Api里加上注释:

  1. /// <summary>
  2. /// Put value by id and value
  3. /// </summary>
  4. /// <param name="id">id</param>
  5. /// <param name="value">value</param>
  6. /// PUT api/values/5
  7. [HttpPut("{id}")]
  8. public void Put(int id, [FromBody]string value)
  9. {
  10. }

4.运行结果

1.在浏览器中输入:http://localhost:/swagger/v1/swagger.json

返回Json文档:



用json viewer打开json文件:

2.在浏览器输入:http://localhost:9040/swagger/

到此说明配置Swagger成功。

详细的API列表和文档说明:

5.主要问题的解决办法

1.RoutePrefix

这是个坑,要好好匹配当前的项目路径,不然UI打不开

2.SwaggerEndpoint

这是个坑,也是一样,如果路径匹配错误,UI打开了但是读取json文档失败。

这两个路径配置可以多试几次,我尝试了几十次~~

6.可以自定义UI

这个暂时没有做,今天太晚了,占个位置~

参考文档

1.Get started with Swashbuckle and ASP.NET Core

2.Swagger .NETCORE can't read json

3.ASP.NET Core 中文文档

.NET Core和Swagger 生成 Api 文档的更多相关文章

  1. .NET Core和Swagger 生成 Api 文档转

    阅读目录 1.引用 2.打开startup.cs文件 3.设置XML注释 4.运行结果 5.主要问题的解决办法 6.可以自定义UI 前言 最近写了好多Web api, 老大说太乱了,要整理一下,使用S ...

  2. .net core 使用swagger生成API文档

    [1]安装Swashbuckle.AspNetCore包 [2]在Startup.cs中注册swagger //注册Swagger生成器,定义一个和多个Swagger 文档 services.AddS ...

  3. .Net Core 3.1 WebApi使用Swagger生成Api文档

    用swagger生成Api文档 1.安装Swashbuckle.AspNetCore 右键单击"解决方案资源管理器" > "管理 NuGet 包"中的项目 ...

  4. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  5. asp.net core 使用 swagger 生成接口文档

    参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...

  6. .net core 使用 swagger 生成接口文档

    微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...

  7. 12 Django Rest Swagger生成api文档

    01-简介 Swagger:是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新.当接口有变动时,对应的接 ...

  8. Laravel(PHP)使用Swagger生成API文档不完全指南 - 基本概念和环境搭建 - 简书

    在PHPer中,很多人听说过Swagger,部分人知道Swagger是用来做API文档的,然而只有少数人真正知道怎么正确使用Swagger,因为PHP界和Swagger相关的资料实在是太少了.所以鄙人 ...

  9. 使用swagger生成API文档

    有时候一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率.本文将介绍如何使用swagger生成接口文档. swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RES ...

随机推荐

  1. bzoj2281 [Sdoi2011]黑白棋

    一眼$nimk$游戏,后来觉得不对劲,看了黄学长博客发现真的不是$nimk$. 就当是$nimk$做吧,那么我们要保证每一位上一的个数都是$d+1$的倍数. $dp$:$f[i][j]$表示从低到高第 ...

  2. BZOJ_3879_SvT_后缀数组+单调栈

    BZOJ_3879_SvT_后缀数组+单调栈 Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个 ...

  3. 我的mfc基础知识点

    最近由于作业的缘故,结交了mfc这个新朋友,虽然他对我还很是陌生,相信日久定能生情!现在记录一些学习的笔记,备忘. MFC提供了不同类型的设备描述表的类(绘图类):CDC.CPaintDC.CClie ...

  4. SAP S4系统创建Customer和Vendor的BAPI

    对应的BAPI是:RFC_CVI_EI_INBOUND_MAIN SAP 又调皮了,又不安常理出牌!

  5. Redis持久化方式的选择

    本文将介绍Redis持久化的两种方式:快照持久化和AOF持久化,并对两种方法进行分析和对比,方便在实际中做出选择. 持久化 什么是持久化 Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘 ...

  6. ConstraintLayoutDemo【约束性布局知识梳理】【基于1.1.3】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在较新版本的Android Studio中新建项目默认使用 ConstraintLayout进行布局的. ConstraintLay ...

  7. 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理

    这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...

  8. Go map实现原理

    map结构 整体为一个数组,数组每个元素可以理解成一个槽,槽是一个链表结构,槽的每个节点可存8个元素,搞清楚了map的结构,想想对应的增删改查操作也不是那么难

  9. TCP的三次握手与四次挥手

    TCP的三次握手与四次挥手 一.TCP(Transmission Control Protocol 传输控制协议) TCP是面向对连接,可靠的进程到进程通信的协议 TCP是提供全双工服务,即数据可在同 ...

  10. 学习web的第二天

    之前因为技能大赛的原因,导致我这门课没有上.其实上学期是开Dreamweaver网页制作的课程的,所以老师讲的很快.我就利用课后时间去补漏,今天讲了HTML标签:1.标题标签<h1>~&l ...