使用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上找到。

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

  1. default.asp html,ASP.NET Core 设置默认起始页(如default.html)

    测试页面foo.html 在Startup.cs内使用middleware 代码如下: DefaultFilesOptions defaultFilesOptions = new DefaultFil ...

  2. Asp.Net Core EndPoint 终结点路由工作原理解读

    Asp.Net Core EndPoint 终点路由工作原理解读 一.背景 在本打算写一篇关于Identityserver4 的文章时候,却发现自己对EndPoint -终结点路由还不是很了解,故暂时 ...

  3. asp.net core设置默认起始页Default Page和重定向

    为什么80%的码农都做不了架构师?>>>    用Asp.Net Core的网站Deploy至IIS,因此找了下,发现两种方法: 添加引用 using System.Threadin ...

  4. 如何为ASP.NET Core设置客户端IP白名单验证

    本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式. 你可以使用一下3种方式: 使用中间件检查每个请求的远程IP地址 使用Action过滤器为指定的Controlle ...

  5. 使用Azure AD B2C为ASP.NET Core 设置登录/注册

    一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...

  6. 【ASP.NET Core】给路由规则命名有何用处

    上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法,本篇咱们扯一下有关 URL 路径规则的名称问题.在扯今天的话题之前,先补充点东东.在上一篇中设置视图搜索路径时用到三个有序参数:{2}{1}{0}, ...

  7. ASP.NET Core应用程序的参数配置及使用

    应用程序的开发不仅仅是写代码这点事情.假设你正在开发一个能够支持多次部署的微服务,此时你就需要有一个合理的应用程序配置方案,以便在开发和生产环境中能够方便地选用不同的配置参数,并且能够在部署到容器服务 ...

  8. ASP.Net Core Razor 页面路由

    在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求.最简单的方法是将 URL 映射到磁盘上的物理文件,在 Razor 页面框架中, ...

  9. 路由代码WebApi设置namespace路由参数

    最近研究路由代码,稍微总结一下,以后继续补充: webapi默许是没有namespace签名,所以,自己着手,饥寒交迫,至于这个参数的使用场景,我相信大多数程序猿在开始mvc的时候也会用这个路由参数, ...

最新文章

  1. react 打包后,项目部署完毕,刷新页面报错(404)
  2. java设计模式---访问者模式
  3. Spring Boot返回前端Long型丢失精度
  4. 通过环境变量注入的方式启动SAP Spartacus B2B模块
  5. Vim配置IDE开发环境
  6. PHP获取当前页面URL
  7. python中list怎么用_python中list(列表)的使用方法总结(图文)
  8. 未来无人车市场中,谁最赚钱?
  9. jav学习之————IO流
  10. word字体号对应的磅数
  11. codeforces 999 C. Alphabetic Removals(1200)
  12. 新浪邮箱服务器设置,免费的新浪邮箱设置outlook怎么设置?
  13. jquery——淡入淡出(fadein与fadeout)
  14. android killer 反编译工具,androidkiller反编译软件使用与踩坑并解决的过程
  15. Back键和Home键的屏蔽
  16. js 日期格式转换为中文日期
  17. Github如何绑定域名
  18. 整理项目管理中的挣值管理相关计算 AC PV EV BAC CV SV CPI SPI ETC EAC 计算
  19. Java小项目——家庭记账项目
  20. 基于JavaWeb实现的师生交流系统平台

热门文章

  1. char data[0]在struct末尾的用法
  2. C#隐藏桌面图标和任务栏
  3. Struts 2.x No result defined for action 异常
  4. 北京一公交车发生爆炸 疑为乘客携带药品起反应
  5. Mac OS使用技巧十九:Safari碉堡功能之二查看网页源码
  6. geek_How-To Geek正在寻找安全作家
  7. Install Odoo 11 on CentOS 7
  8. C++回声服务器_4-UDP connect版本客户端
  9. libco协程库源码解读
  10. 新款ATM恶意软件Alice 可对抗动态分析 但目前需要物理接触主机