asp.net core swagger使用及注意事项
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标记
更多请参考swagger官网:https://swagger.io/
asp.net core swagger使用及注意事项的更多相关文章
- ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
写在前面 是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4开发的授权中心用于对Api资源的保护.问题来了,我们的Api用了SwaggerUI做接 ...
- Asp.Net Core: Swagger 与 Identity Server 4
Swagger不用多说,可以自动生成Web Api的接口文档和客户端调用代码,方便开发人员进行测试.通常我们只需要几行代码就可以实现这个功能: ... builder.Services.AddSwag ...
- 记Asp.Net Core Swagger 使用 并带域接口处理
引用作者原话:Asp.Net的WebApi中使用Swagger作为说明和测试的页面是非常不错的,比起WebApiTestClient来至少在界面上的很大的提升.但是使用Swagger时如果只是一般的控 ...
- ASP.NET CORE Swagger
Package 添加并配置Swagger中间件 将Swagger生成器添加到方法中的服务集合中Startup.ConfigureServices: public void ConfigureServi ...
- Asp.Net Core Swagger 接口分组(支持接口一对多暴露)
开始之前,先介绍下swagger常用方法. services.AddSwaggerGen //添加swagger中间件 c.SwaggerDoc //配置swagger文档,也就是右上角的下拉 ...
- ASP.NET Core Swagger 显示接口注释
在Startup中 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title ...
- ASP.NET CORE WEBAPI文件下载
ASP.NET CORE WEBAPI文件下载 最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格 ...
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档
原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...
随机推荐
- java只能的round,ceil,floor方法的使用
三者均位于java.lange包下的Math类中 round: 在原来数字的基础上加上0.5后向下取整, 例如: Math.floor(11.5)=12; Math.floor(-11.5)=-11( ...
- 简介WEB应用服务器TONCAT
1.HTTP与Tomcat简介1.1 什么是Http协议HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议.所有的WWW文件都必须 ...
- vue-cli 创建项目不成功 原因为项目文件夹无node_modules文件 进行npm install不成功解决办法
不知道有没有童鞋出现过全局安装vue-cli是成功的,但是创建项目时命令行报了很多错误,如下 本来是需要按照提示依次切换到项目文件夹,再npm run dev 即可完成项目创建并启动的,但是又报了如下 ...
- 函数指针,使用qsort,进行结构体排序
#include <stdio.h> #include <stdlib.h> #define STU_NAME_LEN 16 /*学生信息*/ typedef struct s ...
- 利用QSystemSemaphore和QSharedMemory实现进程间通讯
https://blog.csdn.net/liji_digital/article/details/70547082 线程间的通讯可以由QSemaphore调控,以保证各个线程对同一资源的访问不冲突 ...
- Elasticsearch环境搭建和介绍(Windows)
一.Elasticsearch介绍和安装 1.1 介绍 Elastic Elastic官网:https://www.elastic.co/cn/ Elastic有一条完整的产品线:Elasticse ...
- js的新生代垃圾回收
推荐阅读:https://www.cnblogs.com/chengxs/p/10919311.html 在进行老生代的标记清除法回收以前,还会有一个新生代的垃圾回收算法执行. 新生代和老生代 所谓新 ...
- codeforces626F
CF626F Group Projects 有n个学生,每个学生有一个能力值ai.现在要把这些学生分成一些(任意数量的)组,每一组的“不和谐度”是该组能力值最大的学生与能力值最小的学生的能力值的差. ...
- 1.OC类
一.基础语法 1.在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量.方法.类的声明使用关键字@interface和@end. 注意:.h中的方法只是做一个声明, ...
- Tomcat单独部署,控制台乱码解决方法
使用Tomcat作为容器,部署项目的时候,发现控制台总是乱码,乱码如下 打开Tomcat的部署目录 找到这一行,将UTF-8改成GBK java.util.logging.ConsoleHandler ...