ASP.NET Web API實踐系列03,路由模版, 路由慣例, 路由設定

來源:互聯網
上載者:User

標籤:style   http   color   io   os   ar   使用   sp   檔案   

ASP.NET Web API的路由和ASP.NET MVC相似,也是把路由放在RouteTable中的。可以在App_Start檔案夾中的WebApiConfig.cs中設定路由模版。預設的路由模版是:

 

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

● 靜態片段api,主要用來區分ASP.NET MVC的路由。
● 為什麼沒有{action}?預設情況下,可以根據慣例找到Action,只要Action的名稱符合慣例。
● 預留位置變數{id}映射Action的參數。

 

□ 根據慣例路由

 

對於GET,POST,PUT,DELETE請求,如果Action的名稱以Get, Post, Put, Delete開頭,這就是符合慣例,意味著在請求的url中無需指明Action,就可以路由到對應的Action中。

 

假設有這樣的一個api控制器:

public class BooksController : ApiController
{
    public void GetAllBooks(){}
    public IEnumerable<Book> GetBookById(int id)
    public HttpResponseMessage DeleteProduct(int id){}
}

● 瀏覽器輸入:api/books 並且是Get請求

不帶參數,由於GetAllBooks的名稱以Get開頭,符合慣例,這裡會映射到GetAllBooks方法。

 

● 瀏覽器輸入:api/books/8 並且是Get請求

帶參數,會映射到GetBookById(int id)方法上。Web API會把字串類型的8賦值給int類型的參數變數id。

 

● 瀏覽器輸入:api/books/8 並且是DELETE請求
映射到DeleteProduct(int id)

 

● 瀏覽器輸入:api/books 並且是POST請求
沒有對應POST請求的Action。返回404狀態代碼。

 

□ 根據HTTP方法路由

 

HttpGet, HttpPut, HttpPost, HttpDelete屬性可以打在Action上面。

 

public class BooksController : ApiController
{
    [HttpGet]
    public Book FindBook(id){}
}

 

如果一個Action允許有多個HTTP方法,就使用AcceptVerbs屬性。

public class BooksController ; ApiController
{
    [AcceptVerbs("GET","HEAD")]
    public Book FindProduct(id){}
}

 

□ 考慮Action的路由

 

我們可以在WebApiConfig.cs中設定路由的模版,把Action考慮進去。

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

 

在api控制器中:

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

此時,在瀏覽器中輸入類似"api/books/details/8"的格式,才能映射到Details(int id)方法上。

 

還可以通過ActionName屬性給Action取別名:

public class BooksController : ApiController
{
    [ActionName("Sth")]
    public HttpResposneMessage GetSth(int id);
}

 

如果不想讓Action參與到路由中,可以使用NoAction屬性。

public class BooksController : ApiController
{
    [NonAction]
    public string GetSomeData(){}
}

 

 

總結:在WebApiConfig.cs中定義的路由模版都被放到了RouteTable中了。在Action層面,如果想讓請求路由到Action上,可以通過慣例、Http方法屬性來實現。

 

ASP.NET Web API實踐系列03,路由模版, 路由慣例, 路由設定

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.