使用SWAGGER和ASP.NET CORE设置可选路由参数

使用SWAGGER和ASP.NET CORE设置可选路由参数

根据OpenAPI 3.0,这是不可能的。但是,如果您真的希望成为现实呢?您是否必须解决并允许您的Swagger文档出错?我在这里向您展示如何使用Swagger和ASP.NET Core设置可选的路由参数。

等等,什么是Swagger?

在偶然的情况下,您导航到了这篇文章,却不知道Swagger是什么,我如何快速介绍一下?“ Swagger是描述REST API的格式的一组规则,因此,它可用于在产品经理,测试人员和开发人员之间共享文档……” – Swagger入门。

Swagger的一种常见用法是通过Swagger UI提供一个界面。Swagger UI允许您可视化API的资源并与之交互。它比Postman或类似工具更具针对性。

设置方案

现在我们有了一个基本的想法,Swagger是什么,我将建立一个人为的方案。让我们假设我们有一个提供博客摘要的API。该API可以根据许多条件返回摘要,所有条件均从URL提供。在此特定用例中,我正在运行Swashbuckle.AspNetCore v5.3.3。此版本使用OpenApi v3.x。据我了解,2.x中的工作原理有所不同。您可以在MSDN或GitHub上的Swashbuckle上阅读。

人为设计的BlogSummaryController,其Get操作具有{day}的可选route参数

让我们继续运行该站点,看看Swagger为我们创造了什么。

默认Swagger生成

您会注意到,即使我定义{day?}了可选的路由选择器,Swagger仍在告诉我们它是必需的。

好了,那我该如何选择路由参数?

我想有几种方法可以解决这个问题。就是说,我发现的方法似乎效果很好,可以根据需要在全局和单独应用。

因此,事不宜迟,让我们将其IOperationFilter作为起点。操作过滤器使我们可以对操作文档进行后期修改。这正是我们需要的,因为我们需要撤销对可选路线参数的限制。

IOperationFilter使可选的路由参数在Swagger中实际上是可选的

在我的ReApplyOptionalRouteParameterOperationFilter课程中,我们首先测试该方法是否具有“ Route”属性。如果是这样,我们然后检查URL中是否具有可选的route参数。如果不是这样,我们就不会理会任何更改。另一方面,如果我们确实有一个,我将使用一些正则表达式来提取密钥。现在我们有了键,我们在操作上找到了一个匹配参数,最后应用了一些更改以使其成为可选键。!

应用IOperationFilter

因此,现在我们有了一个,OperationFilter我们需要实际应用它。您可以通过两种方式进行操作。第一种方法是在中全局应用它SwaggerConfiguration。请注意,全局执行此操作将需要Apply方法中的某些逻辑(以我的示例为例),以跳过不需要的地方应用它。否则可能会给您带来一些痛苦。

全局应用OperationFilter

另一种方法是对OperationFilter要修改的每个动作单独应用。为了在本地应用它,您只需使用SwaggerOperationFilterattribute并指定类型。请注意,您需要Swashbuckle.AspNetCore.Annotations对该属性使用nuget包。如果您全局应用它,那么您也不应在本地应用它。

使用SwaggerOperationFilter在本地应用OperationFilter

使用这两种方法,我们现在可以看到Swagger不再需要该可选参数。世界是一个更好的地方。

带有可选路线参数的新Swagger文档

附加阅读

早些时候,我提到了OpenAPI 3不支持可选路由参数的内容。在谷歌搜索如何解决此问题时,我在Swashbuckle GitHub上遇到了几个“问题”。在第一个有一个参考的意见深,其指向一个OpenAPI的specifiation文件。其要点是必须*必填路径中的变量。

我遇到的第二个实际上引用了第一个,并给了我解决方法的想法。存储库所有者(domaindrivendev)的评论重申,OpenAPI规范不允许这样做。

所以你有它。我向您展示了一种强制其运行的方法,即使规范完全表明这样做并不可行。无论您的内心渴望如何,您都可以利用这些知识来做。我选择使用它。

结论

Swagger(和Swagger UI)是记录和可视化API的整洁方法。Swashbuckle.AspNetCore是使用.NET Core生成该文档的好方法。即使ASP.NET Core允许使用可选的路由参数,OpenAPI规范也会在您的路径中禁止使用可选的值。我向您展示了一种解决方法,使您的文档与实现相匹配。我们使用来完成IOperationFilter。该示例中的所有代码都可以在GitHub上找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)

在一维数组中的考察中,最常见的就是找出数组中的重复数、只出现一次的数或者丢失(消失)数等等。 一般来说,首先想到的就是用哈希表(集合)来记录出现过的数,基本所有的题都可以用集合来做&#…

Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!

“容器、Kubernetes、DevOps、微服务、云原生,这些技术名词的频繁出现,预兆着新的互联网技术时代的到来,大数据高并发将不再遥远,而是大部分项目都必须面对的,消息队列则是核心利器!成熟的消息队列产品很多…

leetcode503. 下一个更大元素 II

一:题目 二:上码 class Solution { public:/**思路: 1.将两个nums拼接到一块这里拼接到一块,当我们最后的元素找不到比其大的时候 就会开始从头开始这样的话就可以继续进行 入栈 或者出栈的操作入栈就是比我栈顶小的元素,出栈的话 那就是 找到了比其大的元素了…

跟我一起学.NetCore之中间件(Middleware)应用和自定义

前言Asp.NetCore中的请求管道是通过一系列的中间件组成的,使得请求会根据需求进行对应的过滤和加工处理。在平时开发中会时常引用别人定义好的中间件,只需简单进行app.Usexxx就能完成中间件的注册,但是对于一些定制化需求还得自己进行处理和封…

leetcode42. 接雨水

一:题目 二:上码 // class Solution { // public: // /**超时 // 思路: // 1.我们按列来计算 这就是表明的是 我们求取接雨水 向上的高度就是雨水量 // 但是这里的话我们的需要对雨水的高度 来进行判定 // 2.那么如何判定…

Magicodes.IE之导入导出筛选器

总体设计Magicodes.IE是一个导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf、Csv和Html。在本篇教程,笔者将讲述如何使用Magicodes.IE的导入导出筛选器。在开始之前,我们需要先了解Magicodes.IE目前支持的筛选…

谈了千百遍的缓存数据的一致性问题

“灵魂拷问保证缓存和数据库的一致性很简单吗?有哪些方式能保证缓存和数据库的一致性呢?如果发生了缓存和数据库数据不一致的情况怎么办呢?在上篇文章我们介绍了缓存的定义分类以及优缺点等,如果还没看的同学可以移步这里听说你会…

BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统

一:项目背景 项目描述 一个基本功能较为完整的后台管理项目。项目主要功能有:登录验证,登录功能还加入了随机验证码的验证; 用户注册,注册中密码基于srping 安全框架提供的加密(自动加盐)的密码储存方式,对注册重名进…

Istio Pilot 源码分析(二)

张海东, ‍多点生活(成都)云原生开发工程师。本篇主要介绍 Pilot 源码中的 ServiceEntryStore 及其推送 xDS 的流程。本文为 Istio Pilot 源码分析系列的第二篇文章。Istio Pilot 源码分析(一)了解了 Pilot 源码的基本…

Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面: 分别点击进去,第一个链接解释了什么是 torch.Tensor: torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组)。 正因为 torch.Tensor 只包…

leetcote34. 在排序数组中查找元素的第一个和最后一个位置

一:题目 二&#xff1a;上码&#xff08;暴力二分&#xff09; // class Solution { // public: // /** // 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// …

Git 图形化操作之合并提交记录

Git 图形化操作之合并提交记录独立观察员 2020 年 9 月 24 日目录1、显示日志2、合并提交记录3、推送合并的提交前言&#xff1a;当我们使用 Git 时&#xff0c;有时会遇到刚提交推送完一次修改&#xff0c;发现漏了该某处&#xff0c;只好又提交推送一次&#xff0c;这样在提交…

Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章&#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别&#xff0c;而这两者都是深拷贝的方法&#xff0c;返回张量的同时&#xff0c;会在内存中创建一个额外的数据副本&#xff0c;与原数据不共享内存&#xff0c;所以不受原数据改变的影响。 这里…

chrome禁止三方cookie,网站登录不了怎么办

背景新版chrome(80)浏览器默认屏蔽所有三方cookie已经不是什么新闻了&#xff0c;具体原因这里不去深究&#xff0c;有大量相关文章介绍&#xff0c;由于目前许多网站都依赖三方cookie&#xff0c;因此该特性的推出还是造成了一些的影响&#xff0c;比如收集用户信息的广告商&a…

leetcode69. x 的平方根

一:题目 二:上码 class Solution { public:/**思路:1.因为我们的 ans的平方 < x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans**/int mySqrt(int x) {int left 0; int right x;int ans 0;while (left < right) {long mid (right-left)/2 left;if (mid*…

初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

点击上方蓝字"小黑在哪里"关注我吧聚合根仓储领域服务BLOB储存应用服务单元测试模块引用前言在前两节中介绍了ABP模块开发的基本步骤&#xff0c;试着实现了一个简单的文件管理模块&#xff1b;功能很简单&#xff0c;就是基于本地文件系统来完成文件的读写操作&…

leetcode367. 有效的完全平方数

一:题目 二:上码 class Solution { public:/**完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半2.那么这就相当于在[left,num/2]中查找某个…

跟我一起学.NetCore之文件系统应用及核心浅析

前言在开发过程中&#xff0c;肯定避免不了读取文件操作&#xff0c;比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问&#xff1b;在配置文件读取章节中有说到&#xff0c;针对不同配置源数据读取由对应的IConfigurationProvider进行读取&#xf…

深度学习入门笔记(1)——导论部分

此笔记来源于 Sebastian Raschka 的 Introduction to Deep Learning 系列课程。 首先介绍的是传统的编程范式&#xff0c;假设我们想实现垃圾邮件识别的功能&#xff0c;传统的方法就是由程序员来找出垃圾邮件的规则并对其进行编程&#xff0c;得到一个垃圾邮件识别的程序。 机…