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() { ... }
}

 

posted on 2017-05-11 00:35  the_owl  阅读(198)  评论(0编辑  收藏  举报

导航