第一条路线有效.
例如API /货架/ SpaceTypes / 1
第二条路线不起作用.我得到多个动作错误.
例如api / Shelves / 1
问)为什么?
这些是我的路线:
config.Routes.MapHttpRoute( "DefaultApiWithAction","api/{controller}/{action}/{id}" ); config.Routes.MapHttpRoute( "DefaultApiWithId","api/{controller}/{id}",null,new { id = @"\d+" } );
这是我的控制器:
public HttpResponseMessage Get(int id) { ... } [ActionName("SpaceTypes")] public HttpResponseMessage GetSpaceTypes(int id) { ... }
解决方法
对于MVC 4.5,这是唯一可行的
目前有一个bug about this.
为了使您的路由工作,以下工作
api/Shelves/ //Get All Shelves api/SpaceTypes/1 //Get Shelf of id 1 api/Shelves/1/SpaceTypes/ //Get all space types for shelf 1
你需要做以下事情.
将您的路由更改为. (注意默认操作..)
config.Routes.MapHttpRoute( name : "DefaultAPi",routeTemplate : "api/{controller}/{id}/{action}",defaults: new {id= RouteParameter.Optional,action = "DefaultAction"} );
在您的控制器中将基本方法更改为
[ActionName("DefaultAction")] public string Get() { } [ActionName("DefaultAction")] public string Get(int id) { } [ActionName("SpaceTypes")] public string GetSpaceTypes(int id) { }
现在一切都应该按预期工作了..
感谢Kip Streithorst全程,for a full explanation