.NET Core Swagger Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround

net,core,swagger,actions,require,unique,method,path,combination,for,openapi,use,conflictingactionsresolver,as,workaround · 浏览次数 : 578

小编点评

**问题描述:** 当我们新增了一个控制器方法时,在运行 Swagger 时会直接报错,异常如下: ``` SwaggerGeneratorException: Conflicting method/path combination \"POST api/UserOperationExample\" for actions - WebApi.Controllers.UserOperationExampleController.GetUserInfoByPageList (WebApi),WebApi.Controllers.UserOperationExampleController.AddUserInfo (WebApi). Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround ``` **分析:** 异常描述表明,Swagger 需要一个唯一的方法/路径组合才能处理请求。由于我们添加了新的控制器方法,导致了路径冲突,从而导致问题出现。 **解决方案:** 解决方法是使用 `ConflictingActionsResolver` 来指定方法的路径。 `ConflictingActionsResolver` 可以帮助 Swagger 识别并选择唯一的路径。 **步骤:** 1. 在控制器类的 `Route` 属性中添加 `[HttpGet]` 或 `[HttpPost]` 标记。 2. 使用 `[Route]` 属性指定方法的路径。例如,如果我们的方法名是 `GetUserInfoByPageList`,我们可以使用 `[Route("api/UserOperationExample/GetUserInfoByPageList")]` 进行指定。 3. 如果有多个方法具有相同的路径,我们可以使用 `[HttpGet]` 或 `[HttpPost]` 属性的顺序来排序。 4. 创建一个 `ConflictingActionsResolver` 实例,并将其设置为 `controllers.resolver` 属性的值。 5. 在 `SwaggerGen` 配置中设置 `consoles` 和 `routes` 属性的值。 **示例:** ```csharp //控制器方法 [Route("api/UserOperationExample/GetUserInfoByPageList")] public IActionResult GetUserInfoByPageList() { // 方法代码 } // 配置 ConflictingActionsResolver services.AddSingleton(); // SwaggerGen 配置 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 设置 Swagger 的路径 app.UseSwaggerGen(options => { options.SwaggerGen.Resolver.RegisterRoutes(app.Application); options.SwaggerGen.Resolver.AddActionMapping( "GetUserInfoByPageList", "api/UserOperationExample", "GetUserInfoByPageList" ); }); } ``` **注意:** * `ConflictingActionsResolver` 的用法取决于你的项目结构和需求。 * `SwaggerGen` 会自动识别并使用 `ConflictingActionsResolver` 来选择唯一的路径。 * 确保你的路由格式正确,并确保路径中的命名符合 OpenAPI 3.0 的规范。

正文

遇到的问题

因为新增了一个控制器方法,从而导致在运行Swagger的时候直接报错,异常如下:

SwaggerGeneratorException: Conflicting method/path combination "POST api/UserOperationExample" for actions - WebApi.Controllers.UserOperationExampleController.GetUserInfoByPageList (WebApi),WebApi.Controllers.UserOperationExampleController.AddUserInfo (WebApi). Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround

 

解决方案

从上面报错的字面描述来看,说的就是对于Swagger/OpenAPI 3.0,Actions需要一个唯一的方法/路径组合,所以我们只需要在每个控制器的Route特性中增加完整的路由即可,如下所示:

[Route("api/[controller]/[action]")]

添加完成后重新运行成功

 

与.NET Core Swagger Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround相似的内容:

.NET Core Swagger Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround

遇到的问题 因为新增了一个控制器方法,从而导致在运行Swagger的时候直接报错,异常如下: SwaggerGeneratorException: Conflicting method/path combination "POST api/UserOperationExample" for acti

基于 .net core 8.0 的 swagger 文档优化分享-根据命名空间分组显示

之前也分享过 Swashbuckle.AspNetCore 的使用,不过版本比较老了,本次演示用的示例版本为 .net core 8.0,从安装使用开始,到根据命名空间分组显示,十分的有用

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

Swagger是什么? Swagger是一个规范且完整API文档管理框架,可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。

Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能

前言 在 SwaggerUI 中加入登录验证,是我很早前就做过的,不过之前的做法总感觉有点硬编码,最近 .Net8 增加了一个新特性:调用 MapSwagger().RequireAuthorization 来保护 Swagger UI ,但官方的这个功能又像半成品一样,只能使用 postman c

为控制器生成OpenAPI注释

非常喜欢. NET 的 `///` 注释,写代码的时候就顺道完成写文档的过程,简直不要太爽了。 ASP. NET CORE 也是一样的,通过 `Swagger` 工具,可以自动生成 API 的接口文档(OpenAPI[规范](https://openapi.apifox.cn/)),提供给前端使用,

基于.NetCore开发博客项目 StarBlog - (26) 集成Swagger接口文档

## 前言 这是StarBlog系列在2023年的第一篇更新😃~ 在之前的文章里,我们已经完成了部分接口的开发,接下来需要使用 curl、Postman 这类工具对这些接口进行测试,但接口一多,每次测试都要一个个填入地址和对应参数会比较麻烦… 我们需要一种直观的方式来汇总项目里的所有接口,并且如果

C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址:https:/

C#/.NET/.NET Core优秀项目和框架2024年6月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。

C#/.NET/.NET Core拾遗补漏合集(24年6月更新)

前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 欢迎加入DotNetGuide技术社区交流群 GitHub

C#/.NET/.NET Core优秀项目和框架2024年5月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。