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配置服务中添加中间件

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

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
}); app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.InjectJavascript("");
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
}

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

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

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

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:49833",
"sslPort":
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"SwaggerTest": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "http://localhost:49833/swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

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

修改Startup的 ConfigureServices配置服务

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

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

二 、注意事项

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

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

打开后内容是:

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

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

/// <summary>
/// Delete
/// </summary>
/// <param name="ids">删除id列表</param>
/// <returns>被成功删除id列表</returns>
[HttpDelete]
public ActionResult<IEnumerable<string>> Delete(params string[] ids)
{
if (ids == null)
return NoContent();
return ids;
} /// <summary>
/// Update
/// </summary>
/// <param name="id">Update id</param>
/// <returns></returns>
[HttpPut]
public IActionResult Update(string id)
{
return Content("Update id:" + id);
} /// <summary>
/// Add
/// </summary>
/// <param name="param">Add ids</param>
/// <returns></returns>
[HttpPost]
public IActionResult Add(params string[] param)
{
return Content(string.Join(",", param));
}

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; namespace SwaggerTest.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class DefaultController : ControllerBase
{
/// <summary>
/// Delete
/// </summary>
/// <param name="ids">删除id列表</param>
/// <returns>被成功删除id列表</returns>
//[HttpDelete]
public ActionResult<IEnumerable<string>> Delete(params string[] ids)
{
if (ids == null)
return NoContent();
return ids;
} /// <summary>
/// Update
/// </summary>
/// <param name="id">Update id</param>
/// <returns></returns>
[HttpPut]
public IActionResult Update(string id)
{
return Content("Update id:" + id);
} /// <summary>
/// Add
/// </summary>
/// <param name="param">Add ids</param>
/// <returns></returns>
[HttpPost]
public IActionResult Add(params string[] param)
{
return Content(string.Join(",", param));
}
}
}

原因:控制器中出现未被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锁--CyclicBarrier

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3533995.html CyclicBarrier简介 CyclicBarrier是一个同步辅助类,允许一 ...

  2. Mybatis之foreach批量插入

    1接口 public boolean insertMembersBatch(@Param("memberList") List<Members> members); @ ...

  3. JAVA系列:浅谈Java中的equals和==

    在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...

  4. require sqlite3时报The specified module could not be found.错误

    http://dependencywalker.com/ 在这个站点下载对应平台的Dependency Walker,打开你自己编译好的.node文件(sqlite3\lib\binding\node ...

  5. DYNAMIC LINK LIBRARY - DLL

    https://www.tenouk.com/ModuleBB.html MODULE BB DYNAMIC LINK LIBRARY - DLL Part 1: STORY What do we h ...

  6. MongoDB新存储引擎WiredTiger实现(事务篇)

    导语:计算机硬件在飞速发展,数据规模在急速膨胀,但是数据库仍然使用是十年以前的架构体系,WiredTiger 尝试打破这一切,充分利用多核与大内存时代,开发一种真正满足未来大数据管理所需的数据库.本文 ...

  7. Postgresql pg_dump 与 pg_restore 使用举例

    pg_dump备份 备份本地osdb数据库,全备份,不需要密码 pg_dump osdb > osdb.sql 备份远程osdb数据库 pg_dump -h 192.168.122.1 -Uos ...

  8. PostgreSQL 数据目录结构

    根目录介绍 data ├── base # use to store database file(SELECT oid, datname FROM pg_database;) ├── global # ...

  9. 2018-2019 ACM-ICPC, Asia Dhaka Regional Contest

    目录 Contest Info Solutions B. Counting Inversion C. Divisors of the Divisors of An Integer E. Helping ...

  10. 2019暑期金华集训 Day1 数据结构

    自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...