C# 未调用Web API路由

C# 未调用Web API路由,c#,asp.net,.net,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net,.net,Asp.net Web Api,Asp.net Web Api Routing,这是我的web API配置: public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes

这是我的web API配置:

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

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
           name: "ReaderTags",
           routeTemplate: "Reader/{readerID}/Tags"
       );

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

    }
}
我希望当我调用我的URL
/Reader/abc/Tags
时,它应该调用我的ReaderController的Tags操作,并将
abc
作为字符串参数传递

但不知何故,它使用了
DefaultAPI
的路径,并试图在
ReaderController
中查找
abc


我缺少什么?

路由映射缺少默认值,这些默认值会让路由表知道要为与模板匹配的路由调用什么控制器和操作

config.Routes.MapHttpRoute(
    name: "ReaderTags",
    routeTemplate: "Reader/{readerID}/Tags",
    defaults: new { controller = "Reader", action = "Tags" }
);
路由模板还假定操作上的字符串参数共享相同的名称:即:
readerID

public IHttpActionResult Tags(string readerID) {
    //...
}
由于
config.maphttpAttribute路由(),然后可以通过属性路由而不是像这样基于约定的路由来实现相同的功能

//GET Reader/abc/Tags
[HttpGet]
[Route("Reader/{readerID}/Tags")]
public IHttpActionResult Tags(string readerID) {
    //...
}

好东西