初识Web Api路由规则

由于搬砖几年来从来没有用到过Web Api,但是又觉得这个东西之后会用,或者比较重要,所以最近有时间大概看了看,也差不多是这篇博客的读后感

1.默认路由规则

默认路由 api/{controller}/{id} 其中最重要的是controller,能够锁定到具体的类,而id则不重要,是一个可选参数,也只是表示一个参数;这里通过controller能够得到类,然后再依据url后面接的参数来匹配具体的方法,要是多个方法的参数相同或者无参,就不能够确认是类中的具体的哪个方法,所以下面2/3/4三种方法可以找到需要的类中的方法

默认路由规则

URL:http://localhost:65491/api/T0716?ssd=2333&ssw=112
返回:QBZ:ssd:2333 | ssw:112

public class T0716Controller : ApiController
{
    [HttpGet]
    public string QBZ(string ssd, int ssw)
    {
        return "QBZ:ssd:" + ssd + " | ssw:" + ssw;
    }
}

2.修改默认路由规则

修改默认路由 api/{controller}/{action}/{id} 在controller后面加上action,也就是加上方法名,如果有方法的重载,依据url后面对应的参数,就能够锁定唯一的重载方法;这种方法很简单,但是不推荐,由于Restful风格的服务要求请求的url中不能包含Action,因此WebApi不提倡在url中指定Action
修改默认路由规则

URL:http://localhost:65491/api/T0716/M16A4
返回:M16A4:无参

public class T0716Controller : ApiController
{
    [HttpGet]
    public string M416()
    {
        return "M416:无参";
    }

    [HttpGet]
    public string M16A4()
    {
        return "M16A4:无参";
    }
}

3.自定义路由规则

自定义路由就是在默认路由下面或者上面再写一个路由,注意起不同的name,自定义routeTemplate规则,比如加上action,系统会按照上下的顺序去依次匹配路由,第一个失败就继续匹配第二个,第一个成功了,则之后的都不会进行匹配了;路由约束就是给比如说id加上限定constraints: new { id = @"\d*" }id必须为整数,否则就匹配不上路由规则,这种方法可自由发挥的空间比较大,但是也容易引起没考虑到的问题;
自定义路由规则+路由约束

URL:http://localhost:65491/api/T0716/M16A4
返回:M16A4:无参

public class T0716Controller : ApiController
{
    [HttpGet]
    public string M416()
    {
        return "M416:无参";
    }

    [HttpGet]
    public string M16A4()
    {
        return "M16A4:无参";
    }
}

4.特性路由

特性路由比较简单,我感觉几乎是抛弃了WebApiConfig.cs中的路由规则,而且也不用考虑controller和action,可直接使用

默认路由规则

URL:http://localhost:65491/T0716/AKM?SSD=Hi&SSW=Hello
返回:AKM:ssd:Hi | ssw:Hello

public class T0716Controller : ApiController
{
    [HttpGet]
    [Route("T0716/AKM")]
    public string AKM(string ssd, string ssw="我是默认值")
    {
        return "AKM:ssd:" + ssd + " | ssw:" + ssw;
    }
}

url是不区分大小写的
路由弱化action的概念,感觉其实不太方便
Route特性路由,用起来可能是方便的

你可能感兴趣的:(初识Web Api路由规则)