使用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
要修改的每个动作单独应用。为了在本地应用它,您只需使用SwaggerOperationFilter
attribute并指定类型。请注意,您需要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上找到。
使用SWAGGER和ASP.NET CORE设置可选路由参数相关推荐
- default.asp html,ASP.NET Core 设置默认起始页(如default.html)
测试页面foo.html 在Startup.cs内使用middleware 代码如下: DefaultFilesOptions defaultFilesOptions = new DefaultFil ...
- Asp.Net Core EndPoint 终结点路由工作原理解读
Asp.Net Core EndPoint 终点路由工作原理解读 一.背景 在本打算写一篇关于Identityserver4 的文章时候,却发现自己对EndPoint -终结点路由还不是很了解,故暂时 ...
- asp.net core设置默认起始页Default Page和重定向
为什么80%的码农都做不了架构师?>>> 用Asp.Net Core的网站Deploy至IIS,因此找了下,发现两种方法: 添加引用 using System.Threadin ...
- 如何为ASP.NET Core设置客户端IP白名单验证
本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式. 你可以使用一下3种方式: 使用中间件检查每个请求的远程IP地址 使用Action过滤器为指定的Controlle ...
- 使用Azure AD B2C为ASP.NET Core 设置登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- 【ASP.NET Core】给路由规则命名有何用处
上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法,本篇咱们扯一下有关 URL 路径规则的名称问题.在扯今天的话题之前,先补充点东东.在上一篇中设置视图搜索路径时用到三个有序参数:{2}{1}{0}, ...
- ASP.NET Core应用程序的参数配置及使用
应用程序的开发不仅仅是写代码这点事情.假设你正在开发一个能够支持多次部署的微服务,此时你就需要有一个合理的应用程序配置方案,以便在开发和生产环境中能够方便地选用不同的配置参数,并且能够在部署到容器服务 ...
- ASP.Net Core Razor 页面路由
在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求.最简单的方法是将 URL 映射到磁盘上的物理文件,在 Razor 页面框架中, ...
- 路由代码WebApi设置namespace路由参数
最近研究路由代码,稍微总结一下,以后继续补充: webapi默许是没有namespace签名,所以,自己着手,饥寒交迫,至于这个参数的使用场景,我相信大多数程序猿在开始mvc的时候也会用这个路由参数, ...
最新文章
- react 打包后,项目部署完毕,刷新页面报错(404)
- java设计模式---访问者模式
- Spring Boot返回前端Long型丢失精度
- 通过环境变量注入的方式启动SAP Spartacus B2B模块
- Vim配置IDE开发环境
- PHP获取当前页面URL
- python中list怎么用_python中list(列表)的使用方法总结(图文)
- 未来无人车市场中,谁最赚钱?
- jav学习之————IO流
- word字体号对应的磅数
- codeforces 999 C. Alphabetic Removals(1200)
- 新浪邮箱服务器设置,免费的新浪邮箱设置outlook怎么设置?
- jquery——淡入淡出(fadein与fadeout)
- android killer 反编译工具,androidkiller反编译软件使用与踩坑并解决的过程
- Back键和Home键的屏蔽
- js 日期格式转换为中文日期
- Github如何绑定域名
- 整理项目管理中的挣值管理相关计算 AC PV EV BAC CV SV CPI SPI ETC EAC 计算
- Java小项目——家庭记账项目
- 基于JavaWeb实现的师生交流系统平台
热门文章
- char data[0]在struct末尾的用法
- C#隐藏桌面图标和任务栏
- Struts 2.x No result defined for action 异常
- 北京一公交车发生爆炸 疑为乘客携带药品起反应
- Mac OS使用技巧十九:Safari碉堡功能之二查看网页源码
- geek_How-To Geek正在寻找安全作家
- Install Odoo 11 on CentOS 7
- C++回声服务器_4-UDP connect版本客户端
- libco协程库源码解读
- 新款ATM恶意软件Alice 可对抗动态分析 但目前需要物理接触主机