Asp.Net Core中使用Swagger,你不得不踩的坑
很久不来写blog了,换了新工作后很累,很忙。每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagger,你不得不踩的坑.
这篇文章着重讲几点:
- swagger 跨层注释问题
- swagger Get请求传多个参数的问题
- swagger Enum 注释问题
- swagger api文档版本控制
第一步:搭建一个webapi项目或者mvc项目,引入swagger nuget
我创建项目,习惯性的先创建一个解决方案,取名为TB.AspNetCore.Swagger
接着会在解决方案上新建项目,取名TB.AspNetCore.Swagger.SApi,然后选择webapi,https最好去掉,加上后提示你要证书什么的,还会提示你网站不安全,我们做测试,没必要勾选
为了本项目问题的说明,我们会继续在常见三个类库项目TB.AspNetCore.Swagger.Data 放数据库实体,TB.AspNetCore.Swagger.Model 放模型-ViewModel,TB.AspNetCore.Swagger.Enum 放枚举类型
删除项目默认生成的class和controller,在api项目上引入swagger的nuget包,搜索:Swashbuckle.AspNetCore,这个包就在持续更新速度很快,已经到了3.0
第二部:引入版本控制nuget,添加关键性配置代码
这两个包是做版本控制管理的,如果不需要可以不添加,这里我做演示就添加上,额外再引入一个包Microsoft.Extensions.PlatformAbstractions,这个包是获取一些系统配置路径变量的包,这个包实在鸡肋,没有注释。。添加部分关键代码在configuration和configurationservice,代码如下:
services.AddSwaggerGen(
options =>
{
// resolve the IApiVersionDescriptionProvider service
// note: that we have to build a temporary service provider here because one has not been created yet
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>(); // add a swagger document for each discovered API version
// note: you might choose to skip or document deprecated API versions differently
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description));
} // add a custom operation filter which sets default values
options.OperationFilter<SwaggerDefaultValues>(); //
// integrate xml comments
options.IncludeXmlComments(XmlCommentsFilePath);
options.IncludeXmlComments(XmlModelsFilePath);
}); public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseMvc(); //Swagger
app.UseSwagger();
app.UseSwaggerUI(
options =>
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
}
});
}
第三部:新建控制器,测试我们的项目
我做了一个订单查询控制器,一个提交订单,一个查询订单,查询订单为get请求多参数,提交订单为post请求,其中的备注设计到枚举类型的如何加载
代码如下:
namespace TB.AspNetCore.Swagger.SApi.Controllers
{
[Produces("application/json")]
[ApiVersion("1.0", Deprecated = false)]
[Route("api/v{api-version:apiVersion}/[controller]/[action]")]
[ApiController]
public class OrderController : ControllerBase
{
/// <summary>
/// 查询订单
/// </summary>
/// <param name="orderCode">订单号</param>
/// <param name="orderName">订单名称</param>
/// <returns></returns>
[HttpGet("{orderCode}/{orderName}")]
public OrderModel QueryOrder(string orderCode, string orderName)
{
OrderModel model = new OrderModel
{ OrderCode = orderCode };
return model;
} /// <summary>
/// 提交订单
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public OrderModel SubOrder([FromBody]OrderModel model)
{
return model;
}
} public class OrderModel
{
/// <summary>
/// 订单号
/// </summary>
public string OrderCode { get; set; } /// <summary>
/// 订单金额
/// </summary>
public decimal OrderAmount { get; set; } /// <summary>
/// 订单类型
/// <Remark>
/// 0 商家入驻
/// 1 线下交易
/// </Remark>
/// </summary>
public OrderTypeInfo OrderType { get; set; } } /// <summary>
///
/// </summary>
public enum OrderTypeInfo
{
/// <summary>
/// 商家入驻
/// </summary>
[Description("商家入驻")]
StoreEntry = ,
/// <summary>
/// 线下交易
/// </summary>
[Description("线下交易")]
StoreTrade = , }
}
效果图如下:**我把model和enum写到一个文件里,如果分别跨层写的话,也没有什么问题,只需要在startp里配置一下,由于时间关系,源码我上传到我都github,就不再细分了
github地址:https://github.com/TopGuo/TB.AspNetCore.Swagger
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力
欢迎大家关注我都我的微信 公众号,公众号涨粉丝人数,就是你们对我的喜爱程度!
Asp.Net Core中使用Swagger,你不得不踩的坑的更多相关文章
- ASP.Net Core中使用Swagger
我们先简单介绍下什么是Swagger,主要是用来干嘛?? 在Swagger诞生之前,我们通常在开发接口的过程中,需要前后端共同维护一个接口文档,然后大家按照接口文档的规范进行对接.接口文档俨然成了接口 ...
- Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI
WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- ASP.NET Core WebApi使用Swagger生成api
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档
1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...
- 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...
- 在ASP.NET Core中怎么使用HttpContext.Current
一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目 ...
- 【懒人有道】在asp.net core中实现程序集注入
前言 在asp.net core中,我巨硬引入了DI容器,我们可以在不使用第三方插件的情况下轻松实现依赖注入.如下代码: // This method gets called by the runti ...
- 谈谈ASP.NET Core中的ResponseCaching
前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...
随机推荐
- C# EntityFramework Code First 迁移 降级 回退到空数据库
C# EntityFramework Code First 迁移 降级 回退到空数据库 1.包管理器控制台-迁移 在包管理器控制台中运行 Enable-Migrations Add-Migratio ...
- MySQL ERROR 1820 (HY000)
You must reset your password using ALTER USER statement before executing this statement报错处理 解决方式如下: ...
- 错误: Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for studentDao.insert
详细错误信息: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java. ...
- 宏定义define和const的区别
define和const都可以用来定义常量,define的格式为:#define 标识符 字符串,const在定义常量前面,const类型定以后不能被修改,区别主要有如下几点: 1.编译器处理方式不同 ...
- 记录MYSQL中SQL语句的一个坑.
MYSQL5.7 假设我们有一个表 : h_member_cards_my (ID, WXOPEN_ID) 表中有一条记录如下: 理论上第二个SQL应当是可以查询得到一条数据的, 结果却为 Empt ...
- Zabbix (五)
介绍添加主机时,各个参数的含义 https://blog.51cto.com/5001660/2154692 Zabbix配置介绍: https://blog.51cto.com/5001660/21 ...
- tp5 修改默认的分页url
默认分页url:xx.com/xxx?page=1 个人主要感觉不美观,想变成xx.com/xxx/list_1.html这样的 框架本身默认使用的boostrap分页类,目录位置 simplewin ...
- 记录一些 APM 仓储
记录地址,慢慢研究... https://github.com/openzipkin/zipkin https://github.com/apache/incubator-skywalki ...
- IMCASH:卖掉了比特币回老家生活的现在怎么样了?
2012年大学毕业后,我不经意间接触到了比特币,抱着本人对新鲜事物的好奇心和知乎上的一些流言蜚语,我把一部分上学时期辛苦兼职赚的钱换成了比特币,当时真的觉得自己中了邪,不知道为什么会入这个坑. 比特币 ...
- 源生API解析XML文档与dom4j解析XML文档
一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...