Web API路由未调用

时间:2018-10-26 04:09:04

标签: 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.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的路线,并试图在abc中找到ReaderController作为动作。

我想念什么?

1 个答案:

答案 0 :(得分:4)

路由映射缺少默认值,该默认值会使路由表知道为匹配模板的路由要调用的控制器和操作

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) {
    //...
}