.Net Web API不匹配路由

时间:2017-06-05 02:07:04

标签: c# asp.net-web-api asp.net-web-api-routing

我在理解Web API 2如何处理路由方面遇到了一些麻烦。

  • 我创建的PostsController在标准操作方面运行得很好,GETPOST等。
  • 我尝试添加一个名为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, }
            );

1 个答案:

答案 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);    
}

参考Attribute Routing in ASP.NET Web API 2