Web API 路由 [一] Convention-Based Routing

Routing by Naming Convention

  在App_Start/ WebApiConfig.cs文件中

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

步骤:

1) 进行路由匹配,若匹配失败则返回404

2) 找到对应的Controller

3) 找到对应的Action。

原则1:根据HTTP的方法,找以该方法开头的函数。例如,HTTP的GET方法可以对应 GetUser(int id)或者GetAllUser()

原则2:在1基础上,如果其他可选的参数设置了(例如{id}),则选择相应满足的函数。

原则3:如果不存在对应的action,则调用失败

Routing by Explicitly Specification

  • 使用HttpGet, HttpPut, HttpPost, HttpDelete 关键字,显式说明
  • AcceptVerbs关键字一次声明多个HTTP方法
public class ProductsController : ApiController
{
[HttpGet]
public Product FindProduct(id) {} [AcceptVerbs("GET", "HEAD")]
public Product FindProduct(id) { }
}

Routing by Action Name

  1) 依据URI中的Action字段选择Action

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

  2) Action函数前,声明允许的HTTP方法

public class ProductsController : ApiController
{
[HttpGet]
public string Details(int id);
}

  第二步中,也可以对一个Action进行重载,使用ActionName关键字

public class ProductsController : ApiController
{
[HttpGet]
[ActionName("Thumbnail")]
public HttpResponseMessage GetThumbnailImage(int id); [HttpPost]
[ActionName("Thumbnail")]
public void AddThumbnailImage(int id);
//防止被调用声明
[NonAction]
public string GetPrivateData() { ... }
}
上一篇:Hibernate中双向多对多的两种配置方式


下一篇:转:Ajax中的get和post两种请求方式的异同