[翻譯]ASP.NET Web API的路由

來源:互聯網
上載者:User

標籤:

原文:Routing in ASP.NET Web API

 

  在我們建立一個Web API項目時,會在App_Start檔案夾下的WebApiConfig.cs中定義一個預設路由:

            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{id}",                defaults: new { id = RouteParameter.Optional }            );

  在預設路由中加入“api”是為了避免與ASP.NET MVC的路由衝突。當然如果你不喜歡這個約定,可以修改預設路由。

  路由匹配規則:{controller}和{id}略過,只介紹action的匹配。

    1.Web API首先根據HTTP方法名尋找命名以HTTP方法名開頭的action。舉例:

public class ProductsController : ApiController{    public void GetAllProducts() { }    public IEnumerable<Product> GetProductById(int id) { }    public HttpResponseMessage DeleteProduct(int id){ }}

    2.但是上面的約定只適用於GET、POST、PUT和DELETE方法。其他的HTTP方法可以使用AcceptVerbs attribute匹配,前面的四種方法亦同樣適用。舉例:

public class ProductsController : ApiController{    [HttpGet]    public Product FindProduct(id) {}}    
public class ProductsController : ApiController{    [AcceptVerbs("GET", "HEAD")]    public Product FindProduct(id) { }    // WebDAV method    [AcceptVerbs("MKCOL")]    public void MakeCollection() { }}

    3.根據action名匹配(重寫路由)。舉例:

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

      3.1.根據上面的路由規則“api/products/details/1”的GET請求將會匹配:

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

      3.2.可以使用ActionName attribute重寫action名。舉例:

public class ProductsController : ApiController{    [HttpGet]    [ActionName("Thumbnail")]    public HttpResponseMessage GetThumbnailImage(int id);    [HttpPost]    [ActionName("Thumbnail")]    public void AddThumbnailImage(int id);}

        這樣"api/products/thumbnail/id”就有兩個匹配,分別對應GET和POST。

    4.如果一個方法不想被當作action調用,可以使用NonAction attribute,舉例:

// Not an action method.[NonAction]  public string GetPrivateData() { ... }

 

[翻譯]ASP.NET Web API的路由

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.