【发布时间】:2015-08-28 21:43:27
【问题描述】:
我正在尝试在我的 RESTapi 中创建分层链接。例如:
以下网址将为我提供演员 ID 1 的详细信息:
/api/v1/actor/id/1/
下面的 url 应该会给我所有演员 id 1 的电影:
/api/v1/actor/1/movies
我的路线:
config.Routes.MapHttpRoute(
name: "DefaultCAApi",
routeTemplate: "api/v1/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultOneLevelNested",
routeTemplate: "api/v1/{controller}/{levelOneId}/{action}",
defaults: new { id = RouteParameter.Optional }
);
我在ActorController中的操作:
[HttpGet]
public HttpResponseMessage Id(int id)
{
// logic
return Request.CreateResponse(HttpStatusCode.OK, actor);
}
[HttpGet]
public HttpResponseMessage Movies(int levelOneId)
{
// logic
return Request.CreateResponse(HttpStatusCode.OK, movies);
}
但是这个设置对我不起作用。
/api/v1/actor/id/1/ 给了我正确的回应
但是/api/v1/actor/1/movies 抛出以下错误:
No action was found on the controller 'Actor' that matches the name '1'."
我确实关注了this thread,但它对我不起作用。
有人可以建议我在这里做错了什么吗?我正在使用 MVC 4,WebAPI。
【问题讨论】:
-
/api/v1/actor/movies/1 对于获取演员 1 电影来说似乎更自然。它也可以与其他网址在同一条路线上工作。
-
对我来说这看起来更自然:/api/v1/actor/1/movies 我可以做到这一点吗?
-
那我想这看起来也更自然吧? /api/v1/actor/1/id
-
@Mihai Caracostea:不,但是这个:/api/v1/actor/1/
-
这个可行,我会一会发布路线
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api