Web API 路由 [一] Convention-Based Routing

Routing by Naming Convention

  在App_Start/ WebApiConfig.cs文件中api

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

 步驟:函數

1) 進行路由匹配,若匹配失敗則返回404spa

2) 找到對應的Controllercode

3) 找到對應的Action。blog

原則1:根據HTTP的方法,找以該方法開頭的函數。例如,HTTP的GET方法能夠對應 GetUser(int id)或者GetAllUser()ci

原則2:在1基礎上,若是其餘可選的參數設置了(例如{id}),則選擇相應知足的函數。路由

原則3:若是不存在對應的action,則調用失敗string

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字段選擇Actionit

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

   2) Action函數前,聲明容許的HTTP方法io

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() { ... }
}
相關文章
相關標籤/搜索