1.自定義路由
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 路由 config.MapHttpAttributeRoutes(); //1.默認路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //2.自定義路由一:匹配到action config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "actionapi/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); //3.自定義路由二 config.Routes.MapHttpRoute( name: "TestApi", routeTemplate: "testapi/{controller}/{ordertype}/{id}", defaults: new { ordertype="aa", id = RouteParameter.Optional } ); } }
得到了控制器對象之后,Api引擎通過調用IHttpActionSelector這個接口的SelectAction()方法去匹配action。這個過程主要包括:
- 解析當前的http請求,得到請求類型(是get、post、put還是delete)
- 如果路由模板配置了{action},則直接取到url里面的action名稱
- 解析請求的參數
如果路由模板配置了{action},那么找到對應的action就很簡單,如果沒有配置action,則會首先匹配請求類型(get/post/put/delete等),然后匹配請求參數,找到對應的action。
[HttpGet] public IHttpActionResult GetById(int id) { return Ok<string>("Success" + id ); } [HttpPost] public HttpResponseMessage PostData(int id) { return Request.CreateResponse(); } [HttpPost]//http://xxx/api/savedata public HttpResponseMessage SavaData(ORDER order) { return Request.CreateResponse(); }
2、最簡單的特性路由
[Route("Order/SaveData")] [HttpPost] public HttpResponseMessage SavaData(ORDER order) { return Request.CreateResponse(); } [Route("ordertype/{id}/order")] [HttpGet] public IHttpActionResult GetById(int id) { return Ok<string>("Success" + id ); }
特性路由的目的是為了解決我們公共路由模板引擎解決不了的問題。一個action定義了特性路由之后,就能通過特性路由上面的路由規則找,特性路由的規則可以使用“{}”占位符動態傳遞參數,比如我們有這樣一個特性路由