很久不来写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,你不得不踩的坑的更多相关文章

  1. ASP.Net Core中使用Swagger

    我们先简单介绍下什么是Swagger,主要是用来干嘛?? 在Swagger诞生之前,我们通常在开发接口的过程中,需要前后端共同维护一个接口文档,然后大家按照接口文档的规范进行对接.接口文档俨然成了接口 ...

  2. Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI

    WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...

  3. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  4. ASP.NET Core WebApi使用Swagger生成api

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  5. ASP.NET Core WebApi使用Swagger生成api说明文档

    1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...

  6. 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...

  7. 在ASP.NET Core中怎么使用HttpContext.Current

    一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目 ...

  8. 【懒人有道】在asp.net core中实现程序集注入

    前言 在asp.net core中,我巨硬引入了DI容器,我们可以在不使用第三方插件的情况下轻松实现依赖注入.如下代码: // This method gets called by the runti ...

  9. 谈谈ASP.NET Core中的ResponseCaching

    前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...

随机推荐

  1. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  2. Windows Internals 笔记——关联性

    1.默认情况下,Windows Vista在给线程分配处理器时,使用软关联.意思是如果其他因素都一样,系统将使线程在上一次运行的处理器上运行.让线程始终在同一个处理器上运行有助于重用仍在处理器高速缓存 ...

  3. C语言作业2

    一.实验目的与要求 1.if语句的应用 ●掌握C语言的逻辑运算和关系运算的规则 ●学会正确的使用关系表达式和逻辑表达式 ●掌握if-else语句的使用方法 2.switch/case语句的应用 ●   ...

  4. postgre的函数创建

    语法: CREATE [OR REPLACE] FUNCTION function_name (arguments) RETURNS return_datatype AS $variable_name ...

  5. buildah---github简单记录

    github里着重讲了buildah和podman的区别: buildah对标的是dockerfile的脚本化代替执行. podman对标的是docker命令的代替. gihub地址: https:/ ...

  6. UWP 调用Win32 关机

    话说最近程序需要个晚上自动关机的功能 原则上 uwp 应该是没有关机权限的 上网搜索之 有人说只要这样就可以了 var psi = new ProcessStartInfo("shutdow ...

  7. 创建、使用SpringBoot项目

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  8. docker容器访问宿主机IP

    宿主机执行ifconfig 会看到docker0那个ip,可以使用来访问宿主机

  9. 2019工作计划idea

    2019.2.24 工作需求: 汇总 2008-2018年 销售订单数据; 分类历史订单数据, 并可能采取方法进行预测(预测只是一种行为不代表结果) 目前已知条件: 订单生产周期; 45天(标准天数) ...

  10. Ubuntu Server 12.04(14.04) 静态IP简洁配置

    1.配置静态IP地址: # vim /etc/network/interfaces 原内容有如下4行:auto loiface lo inet loopback auto eth0iface eth0 ...