C# Web API的路由配置

C# Web API的路由配置,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我正在使用.NET4.5.2创建一个WebAPI服务 我希望具有以下URI: /api/v1/timeseries/{id} /api/v1/timeseries/approval/{id} 这样,我希望有两个控制器: 时间经验控制器 时间经验计划控制器 使用下面的默认路由,我实现了我的第一个期望结果(/api/v1/timeseries/{id}),但我不确定如何实现第二个结果。有人能告诉我如何修改路由配置来处理第二个URI吗 public static void Register(H

我正在使用.NET4.5.2创建一个WebAPI服务

我希望具有以下URI:

  • /api/v1/timeseries/{id}
  • /api/v1/timeseries/approval/{id}
这样,我希望有两个控制器:

  • 时间经验控制器
  • 时间经验计划控制器
使用下面的默认路由,我实现了我的第一个期望结果(
/api/v1/timeseries/{id}
),但我不确定如何实现第二个结果。有人能告诉我如何修改路由配置来处理第二个URI吗

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

    // Web API routes
    config.MapHttpAttributeRoutes();

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

一种选择是使用现有路由,并使用url,如:

/api/v1/timeseriesapproval/{id}
请注意,这与您现有的路线完全匹配:

"api/v1/{controller}/{id}",
其中
controller
匹配
timeseriesaproval

另一种选择是针对此需求设置新路线(在现有路线之前):

config.Routes.MapHttpRoute(name: "PutThisBeforeYourExistingOneApi",
    routeTemplate: "api/v1/timeseries/approval/{id}",
    defaults: new { controller = "TimeSeriesApproval", id = RouteParameter.Optional } );

@mjwills:谢谢。如果您希望将此转换为答案,我将接受。关于/TimeSeries/Approval与/TimeSeriesApproval,是否有一个约定?您已经使用的
DefaultApi
几乎是通常的约定-但是这两种类型的示例都有很多。选择你认为最适合你的东西。