Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。是一款RESTFUL接口的文档在线自动生成+功能测试软件。主要目的是构建标准的、稳定的、可重用的、交互式的API以及简单方便的功能测试。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

作用:

    1. 根据基于规范的标准设计和建模API

    2. 几乎可以用任何语言为您的API构建稳定,可重用的代码

 3. 使用交互式API文档改善开发人员体验

 4. 对您的API执行简单的功能测试,而无需开销

 5. 在您的API架构中设置和实施API样式指南

一 、swagger的创建  

1.新建asp.net core项目

2.nuget上安装Swashbuckle.AspNetCore

Swashbuckle有三个主要组件:

  • Swashbuckle.AspNetCore.Swagger:一个Swagger对象模型和中间件,用于将SwaggerDocument对象公开为JSON端点。

  • Swashbuckle.AspNetCore.SwaggerGen:一个Swagger生成器,可SwaggerDocument直接从路由,控制器和模型构建对象。它通常与Swagger端点中间件结合使用,以自动显示Swagger JSON。

  • Swashbuckle.AspNetCore.SwaggerUI:Swagger UI工具的嵌入式版本。它解释了Swagger JSON,以便为描述Web API功能构建丰富,可定制的体验。它包括用于公共方法的内置测试工具。

3.在Startup的 ConfigureServices配置服务中添加中间件

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.Configure<CookiePolicyOptions>(options =>
  4. {
  5. // This lambda determines whether user consent for non-essential cookies is needed for a given request.
  6. options.CheckConsentNeeded = context => true;
  7. options.MinimumSameSitePolicy = SameSiteMode.None;
  8. });
  9. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  10. services.AddSwaggerGen(c =>
  11. {
  12. c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
  13. });
  14. }

4.在Startup的 Configure配置服务中启用中间件

  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. // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  11. app.UseHsts();
  12. }
  13.  
  14. app.UseHttpsRedirection();
  15. app.UseStaticFiles();
  16. app.UseCookiePolicy();
  17.  
  18. app.UseMvc(routes =>
  19. {
  20. routes.MapRoute(
  21. name: "default",
  22. template: "{controller=Home}/{action=Index}/{id?}");
  23. });
  24.  
  25. app.UseSwagger();
  26. app.UseSwaggerUI(c =>
  27. {
  28. c.InjectJavascript("");
  29. c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
  30. });
  31. }

5.启动程序,然后键入url  swagger/index.html或者swagger

6.修改Web API项目首页重定向

在 Properties >> launchSettings.json文件中更改默认配置 >> 启用 "launchUrl": "swagger"配置

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,
  4. "anonymousAuthentication": true,
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:49833",
  7. "sslPort":
  8. }
  9. },
  10. "profiles": {
  11. "IIS Express": {
  12. "commandName": "IISExpress",
  13. "launchBrowser": true,
  14. "launchUrl": "swagger",
  15. "environmentVariables": {
  16. "ASPNETCORE_ENVIRONMENT": "Development"
  17. }
  18. },
  19. "SwaggerTest": {
  20. "commandName": "Project",
  21. "launchBrowser": true,
  22. "launchUrl": "http://localhost:49833/swagger",
  23. "applicationUrl": "https://localhost:5001;http://localhost:5000",
  24. "environmentVariables": {
  25. "ASPNETCORE_ENVIRONMENT": "Development"
  26. }
  27. }
  28. }
  29. }

7.为控制器中每个方法添加注释,启用XML注释为未记录的公共类型和成员提供调试信息     项目 >> 属性 >> 生成

修改Startup的 ConfigureServices配置服务

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.Configure<CookiePolicyOptions>(options =>
  4. {
  5. // This lambda determines whether user consent for non-essential cookies is needed for a given request.
  6. options.CheckConsentNeeded = context => true;
  7. options.MinimumSameSitePolicy = SameSiteMode.None;
  8. });
  9. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  10. services.AddSwaggerGen(c =>
  11. {
  12. c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
  13. //添加xml文件
  14. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
  15. var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
  16. c.IncludeXmlComments(xmlPath);
  17. });
  18. }

8.添加控制器,启动  创建成功

二 、注意事项

1.启动后出现 No operations defined in spec! 问题

在查看/swagger/v1/swagger.json文件后发现是没有配置parh

打开后内容是:

  1. {"swagger":"2.0","info":{"version":"v1","title":"My API"},"paths":{},"definitions":{}}

解决:该项目中未添加API控制器,注意必须是API控制器,并且需要在处理方法上添加HTTP标记

  1. /// <summary>
  2. /// Delete
  3. /// </summary>
  4. /// <param name="ids">删除id列表</param>
  5. /// <returns>被成功删除id列表</returns>
  6. [HttpDelete]
  7. public ActionResult<IEnumerable<string>> Delete(params string[] ids)
  8. {
  9. if (ids == null)
  10. return NoContent();
  11. return ids;
  12. }
  13.  
  14. /// <summary>
  15. /// Update
  16. /// </summary>
  17. /// <param name="id">Update id</param>
  18. /// <returns></returns>
  19. [HttpPut]
  20. public IActionResult Update(string id)
  21. {
  22. return Content("Update id:" + id);
  23. }
  24.  
  25. /// <summary>
  26. /// Add
  27. /// </summary>
  28. /// <param name="param">Add ids</param>
  29. /// <returns></returns>
  30. [HttpPost]
  31. public IActionResult Add(params string[] param)
  32. {
  33. return Content(string.Join(",", param));
  34. }

2.启动后出现  Failed to load API definition.  错误

  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.  
  8. namespace SwaggerTest.Controllers
  9. {
  10. [Route("api/[controller]")]
  11. [ApiController]
  12. public class DefaultController : ControllerBase
  13. {
  14. /// <summary>
  15. /// Delete
  16. /// </summary>
  17. /// <param name="ids">删除id列表</param>
  18. /// <returns>被成功删除id列表</returns>
  19. //[HttpDelete]
  20. public ActionResult<IEnumerable<string>> Delete(params string[] ids)
  21. {
  22. if (ids == null)
  23. return NoContent();
  24. return ids;
  25. }
  26.  
  27. /// <summary>
  28. /// Update
  29. /// </summary>
  30. /// <param name="id">Update id</param>
  31. /// <returns></returns>
  32. [HttpPut]
  33. public IActionResult Update(string id)
  34. {
  35. return Content("Update id:" + id);
  36. }
  37.  
  38. /// <summary>
  39. /// Add
  40. /// </summary>
  41. /// <param name="param">Add ids</param>
  42. /// <returns></returns>
  43. [HttpPost]
  44. public IActionResult Add(params string[] param)
  45. {
  46. return Content(string.Join(",", param));
  47. }
  48. }
  49. }

原因:控制器中出现未被HTTP标记的方法

解决方案:删除该方法或者添加相应的HTTP标记

官网文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.2&tabs=netcore-cli#add-and-configure-swagger-middleware

更多请参考swagger官网:https://swagger.io/

asp.net core swagger使用及注意事项的更多相关文章

  1. ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi

    写在前面 是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4开发的授权中心用于对Api资源的保护.问题来了,我们的Api用了SwaggerUI做接 ...

  2. Asp.Net Core: Swagger 与 Identity Server 4

    Swagger不用多说,可以自动生成Web Api的接口文档和客户端调用代码,方便开发人员进行测试.通常我们只需要几行代码就可以实现这个功能: ... builder.Services.AddSwag ...

  3. 记Asp.Net Core Swagger 使用 并带域接口处理

    引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升.但是使用Swagger时如果只是一般的控 ...

  4. ASP.NET CORE Swagger

    Package 添加并配置Swagger中间件 将Swagger生成器添加到方法中的服务集合中Startup.ConfigureServices: public void ConfigureServi ...

  5. Asp.Net Core Swagger 接口分组(支持接口一对多暴露)

    开始之前,先介绍下swagger常用方法. services.AddSwaggerGen    //添加swagger中间件 c.SwaggerDoc  //配置swagger文档,也就是右上角的下拉 ...

  6. ASP.NET Core Swagger 显示接口注释

    在Startup中 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title ...

  7. ASP.NET CORE WEBAPI文件下载

    ASP.NET CORE WEBAPI文件下载 最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格 ...

  8. 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  9. ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档

    原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...

随机推荐

  1. java只能的round,ceil,floor方法的使用

    三者均位于java.lange包下的Math类中 round: 在原来数字的基础上加上0.5后向下取整, 例如: Math.floor(11.5)=12; Math.floor(-11.5)=-11( ...

  2. 简介WEB应用服务器TONCAT

    1.HTTP与Tomcat简介1.1 什么是Http协议HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议.所有的WWW文件都必须 ...

  3. vue-cli 创建项目不成功 原因为项目文件夹无node_modules文件 进行npm install不成功解决办法

    不知道有没有童鞋出现过全局安装vue-cli是成功的,但是创建项目时命令行报了很多错误,如下 本来是需要按照提示依次切换到项目文件夹,再npm run dev 即可完成项目创建并启动的,但是又报了如下 ...

  4. 函数指针,使用qsort,进行结构体排序

    #include <stdio.h> #include <stdlib.h> #define STU_NAME_LEN 16 /*学生信息*/ typedef struct s ...

  5. 利用QSystemSemaphore和QSharedMemory实现进程间通讯

    https://blog.csdn.net/liji_digital/article/details/70547082 线程间的通讯可以由QSemaphore调控,以保证各个线程对同一资源的访问不冲突 ...

  6. Elasticsearch环境搭建和介绍(Windows)

    一.Elasticsearch介绍和安装 1.1 介绍  Elastic Elastic官网:https://www.elastic.co/cn/ Elastic有一条完整的产品线:Elasticse ...

  7. js的新生代垃圾回收

    推荐阅读:https://www.cnblogs.com/chengxs/p/10919311.html 在进行老生代的标记清除法回收以前,还会有一个新生代的垃圾回收算法执行. 新生代和老生代 所谓新 ...

  8. codeforces626F

    CF626F Group Projects  有n个学生,每个学生有一个能力值ai.现在要把这些学生分成一些(任意数量的)组,每一组的“不和谐度”是该组能力值最大的学生与能力值最小的学生的能力值的差. ...

  9. 1.OC类

    一.基础语法 1.在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明, ...

  10. Tomcat单独部署,控制台乱码解决方法

    使用Tomcat作为容器,部署项目的时候,发现控制台总是乱码,乱码如下 打开Tomcat的部署目录 找到这一行,将UTF-8改成GBK java.util.logging.ConsoleHandler ...