- 路由基础
新建一个WebApi服务的时候APP_Start文件夹下的WebApiConfig.cs中生成了一个默认的路由:
Name:“DefaultApi”表示此路由的名称,这里只需要保证路由名称不重复就好。
routeTemplate:“api/{controller}/{id}”定义了路由模板,“api”是固定的部分,用来表示当前请求的url是一个api服务的接口,但是不用非得写成api,可以写成跟你系统相关的名字,例如:no/{controller}/{id},这样,你请求url里边也要以no开头。{controller}是控制器占位符。{id}是参数占位符。
Default:new{id=RounteParameter.Optional}表示路由默认值。可以改成登录页面对应的controller和id。例如:default:new{controller=”login”,id=RounteParameter.Optional}
Constarints:表示路由约束,一般为正则表达式。例如:constraints:new{id=@”/d+”}表示约束必须匹配到一到多个参数。
- 自定义路由
在WebApiConfit.cs中这样写:
第二种用action的不提倡。
- WebApi路由过程
三个阶段:
- 根据请求的url匹配路由模板
- 找到控制器
- 找到action
- WebApi特性路由
对于http请求的方法相同,并且请求的参数也相同的请求解决办法,例如:
1.启动特性路由
在WebApiConfit.cs的Register方法中启用特性路由:
2.在方法上添加特性路由
在OrderController控制器中加这个方法:
在Web里边的Ajax调用:
[Route(“Test/AttrRoute”)]改成
[Route(“Test/AttrRoute”)]则请求的url换成
http://localhost:21528/Test/AttrRoute一样可以成功
3.带参数的特性路由
特性路由规则可以使用“{}”占位符动态传递参数。
比如:
浏览器里调用:
4.参数的约束和默认值
表示{id}取值必须是int类型。并且默认值是3。
5.路由前缀
为同一控制器中的所有方法的所有特性路由标识一个相同的前缀,增加url可读性。
在控制器上用特性[RoutePrefix]标识:
访问这个控制器action的时候,都需要api/order开头,后面接上action特性路由规则。