一、.NET6中使用swagger

swagger支持 API 自动生成同步的在线文档,下面在.NET6中引入

1.建.NET6应用并建以下控制器

/// <summary>
/// 订单接口
/// </summary>
[ApiController]
[Route("[controller]/[action]")]
public class OrderController : Controller
{
/// <summary>
/// 获取订单
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetOrder()
{
return "ok";
}
/// <summary>
/// 创建订单
/// </summary>
/// <param name="request">订单信息</param>
/// <returns></returns>
[HttpPost]
public string CreateOrder([FromBody] OrderRequest request)
{
return "ok";
}
/// <summary>
/// 删除订单
/// </summary>
/// <returns></returns>
[HttpDelete]
public string DeleteOrder()
{
return "ok";
}
/// <summary>
/// 更新订单
/// </summary>
/// <returns></returns>
[HttpPut]
public string UpdateOrder()
{
return "ok";
} }
  /// <summary>
/// 订单请求
/// </summary>
public class OrderRequest
{
/// <summary>
/// 订单名称
/// </summary>
public string orderName { get; set; }
/// <summary>
/// 订单编号
/// </summary>
public string orderNo { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal price { get; set; }
}

2.Nuget包安装swagger需要dll

Swashbuckle.AspNetCore

3.Program.cs中加入swagger

using Microsoft.OpenApi.Models;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "API标题",
Description = "API描述"
});
}); var app = builder.Build(); if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
} app.UseHttpsRedirection();
app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();

这时候访问 http://localhost:xxx/swagger/index.html 已经能访问和显示接口了,但是少了注释

4.生成xml文件,接口文档生成注释需要程序集的xml文件

打开项目的.csproj文件加上标识让程序生成这个程序集的文档

 <GenerateDocumentationFile>true</GenerateDocumentationFile>

5.在Program.cs处加上加载这个xml文件

完成的 Program.cs文件

using Microsoft.OpenApi.Models;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "API标题",
Description = "API描述"
});
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
}); var app = builder.Build(); if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
} app.UseHttpsRedirection();
app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();

这时再运行就能看到注释了

注意:如果参数的Model在其它类库,那么所引用的类库的.csproj文件也要加上上面的标识,并在Program.cs引入程序集的xml文件才能展示参数的注释。

二、.NET6中使用swagger版本控制

1.增加文件 ApiVerionInfo.cs记录版本号

  /// <summary>
/// api版本号
/// </summary>
public class ApiVersionInfo
{
public static string V1;
public static string V2;
public static string V3;
public static string V4;
public static string V5;
}

2.在api控制器上增加版本

   [ApiExplorerSettings(GroupName =nameof(ApiVersionInfo.V1))]

3.再建一个控制器,写v2版本的接口

/// <summary>
/// 订单接口
/// </summary>
[ApiController]
[Route("[controller]/[action]")]
[ApiExplorerSettings(GroupName = nameof(ApiVersionInfo.V2))]
public class OrderV2Controller : Controller
{
/// <summary>
/// 获取订单
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetOrder()
{
return "ok";
}
/// <summary>
/// 创建订单
/// </summary>
/// <param name="request">订单信息</param>
/// <returns></returns>
[HttpPost]
public string CreateOrder([FromBody] OrderRequest request)
{
return "ok";
}
}

4.Program.cs中swagger的引入

完整配置:

using Microsoft.OpenApi.Models;
using Swagger.Demo;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args); // Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddSwaggerGen(options =>
{
foreach (FieldInfo fileld in typeof(ApiVersionInfo).GetFields())
{
options.SwaggerDoc(fileld.Name, new OpenApiInfo
{
Version = fileld.Name,
Title = "API标题",
Description = $"API描述,{fileld.Name}版本"
}); }
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
}); var app = builder.Build(); if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
foreach (FieldInfo field in typeof(ApiVersionInfo).GetFields())
{
c.SwaggerEndpoint($"/swagger/{field.Name}/swagger.json", $"{field.Name}");
}
});
} app.UseHttpsRedirection();
app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();

5.配置完成,查看效果

到这里版本控制就完成了!

.NetCore(.NET6)中使用swagger和swagger版本控制的更多相关文章

  1. 从壹开始前后端分离 [.netCore 填坑 ] 三十四║Swagger:API多版本控制,带来的思考

    前言 大家周二好呀,.net core + Vue 这一系列基本就到这里差不多了,今天我又把整个系列的文章下边的全部评论看了一下(我是不是很负责哈哈),提到的问题基本都解决了,还有一些问题,已经在QQ ...

  2. NETCore使用带有权限验证的Swagger

    原文:NETCore使用带有权限验证的Swagger 文章目录 Swagger 什么是Swagger NuGet安装 Startup注册Swagger 设置默认首页打开Swagger 为接口添加注释 ...

  3. 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问

    一.介绍 当我们开发基于微服务的应用程序的时候,有一个环节总是跳不过去的,那就是要创建 WebApi,然后,我们的应用程序基于 WebApi 接口去访问.在没有 Swagger 以前,我们开发好了 W ...

  4. 测试-Swagger:Swagger

    ylbtech-测试-Swagger:Swagger The Best APIs are Built with Swagger Tools. Swagger 是一款RESTFUL接口的文档在线自动生成 ...

  5. netcore项目中IStartupFilter使用

    背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件.它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口.相当于去掉host,这样省掉了些指定 ...

  6. .NetCore MVC中的路由(2)在路由中使用约束

    p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...

  7. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  8. swagger & api & swagger ui

    swagger & api swagger ui # run server $ swagger project start api-app # call api $ curl http://1 ...

  9. 微服务网关Ocelot加入IdentityServer4鉴权-.NetCore(.NET5)中使用

    Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocel ...

随机推荐

  1. Solution -「集训队作业 2013」「洛谷 P4841」城市规划

    \(\mathcal{Description}\)   link.   求 \(n\) 个结点的简单无向连通图个数,对 \(1004535809~(479\times2^{21}+1)\) 取模.   ...

  2. MySQL中的严格模式

    很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式,何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式.长度 ...

  3. docker安装与基本使用

              一.docker简介 docker的英文翻译是 "码头工人",即搬运工,它搬运的东西就是我们常说的集装箱Container,Container里面装的是任意类型 ...

  4. [旧][Android] Retrofit 源码分析之执行流程

    备注 原发表于2016.04.23,资料已过时,仅作备份,谨慎参考 前言 由于是第一次自己翻看源代码进行学习,加上基础不好,在看源代码的过程中简直痛苦不堪,但同时也暴露出了自己的许多问题.我觉得学习源 ...

  5. 选择自助式BI平台的六大标准

    ​自助式BI平台面向的是不具备IT背景的业务分析人员,与传统BI相比更灵活且易于使用,而且一定程度上摆脱对IT部门的大幅度依赖,代表性的自助BI工具厂商如Tableau.思迈特的Smartbi Eag ...

  6. 还在被数据分析报告折磨?Smartbi让你解放双手

    数据分析报告贯穿了企业经营的时时刻刻,方方面面. 数据分析报告最常用于汇报分享:团队需要分享.沟通,数据分析师需要洞察数据.分析结果分享给企业领导.团队同事.大众媒体及更多的利益相关方. 数据分析报告 ...

  7. WeifenLuo.WinFormsUI.Docking 简单入门

      WinForm布局,开源且好用的貌似不多,WeifenLuo.WinFormsUI.Docking 这个是其中之一,这个唯一的不好地方,就是没有文档,只能通过读源码,不过它源码里面也提供了一个例子 ...

  8. 关于WinForm布局那些事情

    最近项目中,需要用WinForm做一些简单的功能,给第三方作为测试用.本来想着简单的拖几个控件,布局一下就了事了的.但是因为第三方是个大客户,需要展示出我们的技术水平.遂好好的研究了一下WinForm ...

  9. 控制台console不打印信息的解决办法

    一直用控制台调试,突然不知道怎么回事看不到控制台输出的信息了: 需要检查下面几方面的问题: 1:我的就属于第一个问题,不知道怎么搜索的时候就改变了Filter; 2:确保以上选项是勾选的 3:点击设置 ...

  10. linux多进/线程编程(7)——多线程1(线程的创建,回收,分离,设置线程属性等)

    参考资料: 1.博客1:https://blog.csdn.net/zhou1021jian/article/details/71531699 2.博客2:https://blog.csdn.net/ ...