Swashbuckle如何处理ASP.NET Web Api中嵌套控制器的长尾词文档生成问题?

2026-03-30 11:321阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计361个文字,预计阅读时间需要2分钟。

Swashbuckle如何处理ASP.NET Web Api中嵌套控制器的长尾词文档生成问题?

在我ASP.NET Web Api(ASP.NET 4 MVC 5)应用程序中,我设置了以下两条路由:

1. 默认路由:Web Api自带默认路由。例如:api/users/123

2.配置路由:使用MapHttpRoute方法进行配置。例如:config.Routes.MapHttpRoute(name: DefaultApi, routeTemplate: api/{controller}/{id})

在我的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很困惑地显示了我实现的每个方法的两个路由.例如:

Swashbuckle如何处理ASP.NET Web Api中嵌套控制器的长尾词文档生成问题?

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

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

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

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

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = "Users" } ); config.Routes.MapHttpRoute( name: "ChildApi", routeTemplate: "api/{parentController}/{parentId}/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = "Lock" } );

标签:Swashbuckle

本文共计361个文字,预计阅读时间需要2分钟。

Swashbuckle如何处理ASP.NET Web Api中嵌套控制器的长尾词文档生成问题?

在我ASP.NET Web Api(ASP.NET 4 MVC 5)应用程序中,我设置了以下两条路由:

1. 默认路由:Web Api自带默认路由。例如:api/users/123

2.配置路由:使用MapHttpRoute方法进行配置。例如:config.Routes.MapHttpRoute(name: DefaultApi, routeTemplate: api/{controller}/{id})

在我的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很困惑地显示了我实现的每个方法的两个路由.例如:

Swashbuckle如何处理ASP.NET Web Api中嵌套控制器的长尾词文档生成问题?

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

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

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

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

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = "Users" } ); config.Routes.MapHttpRoute( name: "ChildApi", routeTemplate: "api/{parentController}/{parentId}/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = "Lock" } );

标签:Swashbuckle