我在理解Web API 2如何处理路由方面遇到了一些麻烦。
PostsController
在标准操作方面运行得很好,GET
,POST
等。PUT
的{{1}}操作的自定义路由,该模型将模型作为参数。Save()
和[HttpPut]
。我还修改了WebAPIConfig.cs以处理模式[Route("save")]
api/{controller}/{id}/{action}
(http://localhost:58385/api/posts/2/save
),我会收到PUT
行的错误消息。基本上是一个美化的404。No action was found on the controller 'Posts' that matches the name 'save'
,则结果错误仍然存在。我做错了什么?
WebAPIConfig.cs
[Route("{id}/save")]
PostController.cs
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional, }
);
答案 0 :(得分:2)
如果使用[Route]
属性,则属性路由与您配置的基于约定的路由相对应。您还需要启用属性路由。
//WebAPIConfig.cs
// enable attribute routing
config.MapHttpAttributeRoutes();
//...add other convention-based routes
并且路线模板也必须正确设置。
//PostController.cs
[HttpPut]
[Route("api/posts/{id}/save")] // Matches PUT api/posts/2/save
public IHttpActionResult Save(int id, [FromBody]Post post) {
PostsStore store = new PostsStore();
ResponseResult AsyncResponse = store.Save(post);
return Ok(AsyncResponse);
}