ASP.NET Web Api中的Swashbuckle被嵌套控制器搞糊涂了

在我的ASP.NET Web Api(ASP.NET 4 MVC 5)应用程序中,我有两条路由配置如下:

// Default route. Comes "out of the Box" with Web Api.
        // e.g. api/users/123
        config.Routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
        );

        // A route for child controllers. See for example the LockController 
        // that is "nested" under the "UsersController".
        // e.g. api/users/123/lock
        config.Routes.MapHttpRoute(
            name: "ChildApi",routeTemplate: "api/{parentController}/{parentId}/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
        );

这些实际上工作得很好,因为我有一个匹配第一个路由的“顶级”UsersController和一个与第二个路由匹配的“子”LockController(在Users文件夹中).

现在我已经为我的应用程序添加Swashbuckle 5(Swagger for .net),Swagger很困惑地显示了我实现的每个方法的两个路由.例如:

enter image description here

因此Swagger将LockController识别为顶级控制器和子控制器.

我如何告诉Swagger特定控制器是顶级还是孩子?

另外,我可以让swagger认识到锁定资源的路径,例如,/ api / users / {id} / lock而不是/ api / {parentController} / {parentId} / lock正如Swagger当前显示的那样?

解决方法

我认为问题与继承层次结构无关. Swashbuckle为每个路由映射生成路由.为了防止Swashbuckle生成重复的路由,一个解决方案可能是添加控制器约束到路由.我希望这会有所帮助.

config.Routes.MapHttpRoute(
            name: "DefaultApi",defaults: new { id = RouteParameter.Optional },constraints: new { controller = "Users" }
        );

          config.Routes.MapHttpRoute(
            name: "ChildApi",constraints: new { controller = "Lock" }

        );

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....