【问题标题】:WebAPI 2 routing areasWebAPI 2 路由区域
【发布时间】:2026-02-23 17:40:01
【问题描述】:

我有一个名为“Location”的区域,其中有一个名为“CountryController”的控制器。我想使用 api/location/country 调用 GET 操作。有没有办法在默认路由中指定区域?

理想情况下是这样的

routeTemplate: "api/{area}/{controller}/{action}/{id}"

【问题讨论】:

  • 你可以直接在你的WebApiConfig中定义它,只要你的控制器存在于对应的命名空间中即可。区域对于 MVC 来说更像是一个概念来定义它的视图搜索范围,并且由于 APIController 不需要视图,所以它不会成为问题。如果您遇到两个控制器在不同区域具有相同名称的问题,属性路由可以让您的生活更轻松 IMO
  • api/location/country 和 api/country 都没有获取资源。我只是假设这是一个区域路由问题。
  • 您必须首先创建一个路由并在您的 WebApiConfig 中定义{area},尽管您不会将其用于任何事情。否则,路由将假定您的“国家”作为控制器名称。

标签: asp.net-mvc asp.net-mvc-5.1


【解决方案1】:

您将需要编写一个自定义操作选择器来实现基于命名空间的选择。

因为很难做到正确(并在完成后获得性能和缓存)。

我建议改用属性路由。

【讨论】:

  • 属性路由。感谢您的提示!
【解决方案2】:

Asp.Net Web API 项目中没有区域功能,并且使用基于命名空间的控制器等自定义方式更难维护。请访问https://*.com/a/34452395/1365663 获取您的解决方案

【讨论】: