C# 参考路由和Web API

C# 参考路由和Web API,c#,routes,asp.net-web-api,C#,Routes,Asp.net Web Api,我在一些路线上遇到了一些问题。首先,请看这篇文章: 我不确定如何实际创建该答案的路线,因此我开始这样做: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //Art

我在一些路线上遇到了一些问题。首先,请看这篇文章:

我不确定如何实际创建该答案的路线,因此我开始这样做:

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
路径获取、发布、放置、删除等。有什么想法吗


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

这里的顺序很重要。如果希望
api/artist/{id}/album
优先于
api/artist/{id}
,则需要将调用顺序切换到
config.Routes.maphttroute


这样一来,
api/artist
路线将优先于
api/任何东西

是的。。我一直忘了这一点,谢谢:)但是如果“客户”会发表一篇针对/api/ArtistAlbum的帖子呢。。我不希望那成为可能。。因为我想强制客户端使用另一个路由(api/artist/{id}/album)。。还是我在这里遗漏了什么?为什么不让他们知道呢?但是,您可以使用
config.Routes.IgnoreRoute(“api/ArtistAlbum/*”)我相信这会起作用,但是*语法可能会关闭。它可能必须是
{*}
啊哈,好的,谢谢,那太好了:)唯一的原因是我只想用一种方法来创建相册以避免混淆。。我也不希望ArtistAlbum控制器可以通过{controller}/{action}/{id}路由“直接”访问。。但是。。我想这更多的是关于如何构造api的个人“品味”: