码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-06-11 18:22:19      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

原文: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的路由

标签:

原文地址:http://www.cnblogs.com/walden1024/p/4569371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!