WebAPI的路由規則


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定義了特性路由之后,就能通過特性路由上面的路由規則找,特性路由的規則可以使用“{}”占位符動態傳遞參數,比如我們有這樣一個特性路由


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM