【问题标题】:Reference routes and Web API参考路线和 Web API
【发布时间】:2013-03-11 20:05:29
【问题描述】:

我在某些路线上遇到了一些问题。首先,请看这篇文章: REST api, POST entity with relationships?

我不确定如何为该答案实际创建路线/路线,所以我开始这样做:

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

        //Artist/////////////////////////////
        config.Routes.MapHttpRoute(
            name: "ArtistAlbum",
            routeTemplate: "api/artist/{id}/album",
            defaults: new { controller = "ArtistAlbum" }
        );
        ////////////////////////////////////

但第一条路线也可以通过简单地导航到 /api/ArtistAlbum/{artistid}/album 来进行发布、获取等操作,这并不是我想要的。

我想限制用户只能通过使用/api/artist/{id}/album 路由来获取、发布、放置、删除等。有什么想法吗?

如果您问我,由于手动创建大量路线,因此有关如何执行此操作的任何建议似乎都不是很好。

【问题讨论】:

    标签: c# routes asp.net-web-api


    【解决方案1】:

    这里的订单很重要。如果您希望api/artist/{id}/album 优先于api/artist/{id} 之类的内容,则需要将调用顺序切换为config.Routes.MapHttpRoute

    这样api/artist 路由将优先于api/ANYTHING

    【讨论】:

    • 是的.. 我一直忘记这一点,谢谢 :) 但是如果“客户”会针对 /api/ArtistAlbum 发帖怎么办.. 我不希望这成为可能.. 因为我想强制客户使用另一条路线(api/artist/{id}/album).. 还是我在这里遗漏了什么??
    • 为什么不让他们呢?但是,您可以使用 config.Routes.IgnoreRoute("api/ArtistAlbum/*"); 我相信这会起作用,但 * 语法可能会关闭。它可能必须是{*}
    • 啊,好的,谢谢,太好了 :) 唯一的原因是我只想要一种方法来创建专辑以防止混淆......而且我也不希望 ArtistAlbum 控制器“直接” " 可通过 {controller}/{action}/{id} 路由访问.. 但好吧.. 我猜这更多是个人“品味”如何构建 api 的问题 :)
    猜你喜欢
    • 2011-05-10
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多