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


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

        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 }
                );
            }
        }

    它默认注册了两种路由规则,第一行注册的是特性路由,第二行注册的则是传统的映射路由。默认情况下,由于我们没有编写特性路由规则,则是按照传统的Controller方式映射路由。

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

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

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

    1. 根据操作方式找函数的时候,只需要匹配首部即可,因此我们编写函数的时候写成Get()和GetProduct()都是可以的。,
    2. 根据操作方式找函数的时候查找的时候不分大小写,因此写成Get()或get()都是可以的

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

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

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

        [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 翻译及补充,这里就不做多少介绍了。

  • 相关阅读:
    fzu 2204 7 dp
    fzu Problem 2198 快来快来数一数 (快速幂+优化)
    Hdu 5464 Clarke and problem (dp)
    Hdu 5458 Stability (LCA + 并查集 + 树状数组 + 缩点)
    Codeforces Round #321 (Div. 2) A, B, C, D, E
    Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推
    Hdu 5459 Jesus Is Here (2015 ACM/ICPC Asia Regional Shenyang Online) 递推
    Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA
    Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)
    I Count Two Three---hdu5878(打表+二分)
  • 原文地址:https://www.cnblogs.com/Jeely/p/10955964.html
Copyright © 2020-2023  润新知