MVC 4.5 Web API路由无法正常工作?

Dav*_*ave 4 routing controller asp.net-mvc-4 asp.net-web-api

第一条路线有效.

例如 api/Shelves/SpaceTypes/1

第二条路线不起作用.我得到多个动作错误.

例如 api/Shelves/1

问)为什么?

这些是我的路线:

config.Routes.MapHttpRoute(
    "DefaultApiWithAction",
    "api/{controller}/{action}/{id}"
);

config.Routes.MapHttpRoute(
    "DefaultApiWithId",
    "api/{controller}/{id}",
    null,
    new { id = @"\d+" }
);
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

public HttpResponseMessage Get(int id)
{
     ...
}

[ActionName("SpaceTypes")]
public HttpResponseMessage GetSpaceTypes(int id)
{
     ...
}
Run Code Online (Sandbox Code Playgroud)

The*_*ear 11

对于MVC 4.5,这是唯一可行的

目前有一个关于此错误.

为了使您的路由工作,以下工作

api/Shelves/ //Get All Shelves
api/SpaceTypes/1 //Get Shelf of id 1
api/Shelves/1/SpaceTypes/  //Get all space types for shelf 1
Run Code Online (Sandbox Code Playgroud)

你需要做以下事情.

将您的路由更改为.(注意默认动作..)

config.Routes.MapHttpRoute(
    name : "DefaultAPi",
    routeTemplate : "api/{controller}/{id}/{action}",
    defaults: new {id= RouteParameter.Optional, 
    action = "DefaultAction"}
);
Run Code Online (Sandbox Code Playgroud)

在您的控制器中将基本方法更改为

[ActionName("DefaultAction")]
public string Get()
{
}

[ActionName("DefaultAction")]
public string Get(int id)
{
}

[ActionName("SpaceTypes")]
public string GetSpaceTypes(int id)
{
}
Run Code Online (Sandbox Code Playgroud)

现在一切都应该按预期工作了..

感谢Kip Streithorst 完整的解释