Web API 路由未被调用

Web API route not getting called

这是我的网站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 的标签操作并将 abc 作为字符串参数传递。

但不知何故它正在使用 DefaultAPI 的路线并试图在 ReaderController.

中找到 abc 作为一个动作

我错过了什么?

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

config.Routes.MapHttpRoute(
    name: "ReaderTags",
    routeTemplate: "Reader/{readerID}/Tags",
    defaults: new { controller = "Reader", action = "Tags" }
);

路由模板还假定操作中的字符串参数具有相同的名称:即:readerID.

public IHttpActionResult Tags(string readerID) {
    //...
}

并且由于还配置了 config.MapHttpAttributeRoutes();,因此可以通过属性路由而不是像这样基于约定的路由来实现同样的效果

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