这当然是从 Beta 到 RC 的变化。在问题中提供的示例中,您现在需要使用 [HttpGet] 或 [AcceptVerbs("GET")] 来装饰您的操作。
如果您想将基于动词的动作(即“GetSomething”、“PostSomething”)与非基于动词的动作混合使用,则会出现问题。如果您尝试使用上述属性,它将导致与控制器中任何基于动词的操作发生冲突。解决这个问题的一种方法是为每个动词定义单独的路由,并将默认操作设置为动词的名称。此方法可用于在 API 中定义子资源。例如,以下代码支持:“/resource/id/children”,其中 id 和 children 是可选的。
context.Routes.MapHttpRoute(
name: "Api_Get",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
context.Routes.MapHttpRoute(
name: "Api_Post",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Post" },
constraints: new { httpMethod = new HttpMethodConstraint("POST") }
);
希望未来的 Web API 版本能够更好地支持这种情况。当前在 aspnetwebstack codeplex 项目 http://aspnetwebstack.codeplex.com/workitem/184上记录了一个问题。如果这是您希望看到的内容,请对该问题进行投票。