Web API 路由以匹配命名空间

Web API routing to match namespace

我正在创建一个 Web API 供我工作单位的内部使用。我以前没有创建过 Web API。

我想知道,是否可以将我的 "WebApiConfig.cs" 文件(我在其中处理我的默认路由)配置为默认到我的控制器的命名空间路由?

例如:

CalendarDatesController.cs

namespace SampleWebService.Controllers.CalendarServices {
public class MilestoneDatesController : ApiController  {
    public DateTime Get() {
        return new DateTime();
    }
}

}

WebApiConfig.cs(默认)

public static void Register(HttpConfiguration config)  {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

WebApiConfig.cs(提案)

public static void Register(HttpConfiguration config)  {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{**CalendarServices**}/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

在我的 "proposal" 中,它会在路径中包含 'CalendarServices',但是,如果我创建另一个文件夹,我希望其他文件夹位于它的位置。我只是希望它默认为 - api/ControllersParentFolder/Controller/id

虽然本文是基于版本控制的,但您应该可以根据需要使用它。

https://devblogs.microsoft.com/aspnet/asp-net-web-api-using-namespaces-to-version-web-apis/

看看我在 Github 上的解决方案 (WebApiNamespaceRouting)。

特点:

  • 不同命名空间中的相同控制器名称
  • 根据命名空间模式过滤路由中的控制器
  • 与 swagger 兼容