使用ASP.Net WebAPI构建REST服务(二)——路由

REST并无像传统的RPC服务那样显式指定了服务器函数的访问路径,而是将URL根据必定的规则映射为服务函数入口,这个规则就称之为路由。Asp.Net WebAPI的路由方式和Asp.Net MVC是相同的,它支持两种路由方式,传统的路由映射和特性路由。 路由规则WebApiConfig.cs中定义,它的默认内容以下:web

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

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

它默认注册了两种路由规则,第一行注册的是特性路由,第二行注册的则是传统的映射路由。默认状况下,因为咱们没有编写特性路由规则,则是按照传统的Controller方式映射路由。 服务器

关于路由规则,MSDN文档ASP.NET 路由介绍得很是详细,但因为其介绍得太详细了,反而不容易得其门而入,这里我只拿默认的路由规则来简单但的介绍一下个人理解,它的uri格式是这样的"api/{controller}/{id}",其中id是可选的。拿前文的例子来讲吧, mvc

  1. 当咱们对api/products地址进行访问的时候,系统则会首先找到名为ProductsController的控制器。
  2. 而后,根据访问方式查找函数,因为这里是Get操做,则查找Get开头的函数, 这里会找到Get()和Get(int id)两个重载版本。
  3. 最后,根据参数来匹配具体的函数,由于这里没有带参数id。所以匹配到了Get()函数,返回了全部的集合。

另外,这里也有几个经常使用的衍生规则: 函数

  1. 根据操做方式找函数的时候,只须要匹配首部便可,所以咱们编写函数的时候写成 Get() GetProduct()都是能够的 。,
  2. 根据操做方式找函数的时候查找的时候不分大小写,所以写成 Get() 或g et() 都是能够的

当咱们使用带参数的版本时候,也有几个须要注意的地方: url

  1. 参数名不分大小写,咱们写成id或ID都是能够的
  2. 参数名要求严格匹配的,咱们写成ID2是不行的,此时则会匹配到错误的结果Get()

默认的规则虽然大多数的时候仍是比较方便的,可是不少时候咱们须要手动指定个性化的路由规则。例如,咱们能够自定义一个按名称来查询的url:api/products/name=xxx。这个时候则能够用特性路由快速的实现了: spa

    [Route("api/{controller}/name={name}")]
    public IHttpActionResult GetByName(string name)
翻译

关于特性路由,MSDN原文Attribute Routing in ASP.NET MVC 5介绍得很是详细,国内也有很是不错的译文版本Attribute Routing in ASP.NET MVC 5 翻译及补充,这里就不作多少介绍了。 blog

相关文章
相关标签/搜索