【问题标题】:Web API routing: how to convey "api/{controller}/latest" as well as "api/{controller}/{id}"Web API 路由:如何传达“api/{controller}/latest”以及“api/{controller}/{id}”
【发布时间】:2013-11-16 05:42:49
【问题描述】:

这个问题与this one 非常接近,略有不同。

我想设置一个 Web API 路由表,这样我就可以发出 api/items/5api/items/newest 之类的请求,以便客户端可以获取最新的项目。

我一直在浏览some articles,但没有太多运气来确定我是否以正确的方式进行操作。

我的第一个问题是,让调用者找到最新的item 的“正确”或“干净”方式是什么?可以做api/items/newest 之类的事情吗?还是不赞成?

目前,这似乎适用于我的 WebApiConfig.cs 文件:

config.Routes.MapHttpRoute(
    name: "NewestItems",
    routeTemplate: "api/items/newest",
    defaults: new { controller = "Items" }
);

config.Routes.MapHttpRoute(
    name: "ItemsById",
    routeTemplate: "api/items/{id}",
    defaults: new { controller = "Items" }
);

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

这种方法有效,但我很好奇是否有更通用的方法可以做到这一点,而无需制定特定于控制器的路由规则。我尝试了以下方法,但由于规则不明确,因此无法正常工作:

config.Routes.MapHttpRoute(
    name: "ActionWithNoArgument",
    routeTemplate: "api/{controller}/{action}",
);

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

有没有更有效的方法来做到这一点而不诉诸控制器特定的路由规则?

谢谢大家!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-web-api


    【解决方案1】:
    config.Routes.MapHttpRoute(
        name: "NewestItems",
        routeTemplate: "api/{controller}/newest",
        defaults: new { controller = "Items" }
    );
    
    config.Routes.MapHttpRoute(
        name: "ItemsById",
        routeTemplate: "api/items/{id}",
        defaults: new { controller = "Items" }
    );
    

    路由是自上而下处理的,加上{controller} 使其适用于任何控制器

    【讨论】:

    • +1 用于解释路由是自上而下处理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    相关资源
    最近更新 更多