问题
怎么样创建一个路由,不管客户端传不传这个参数,都可以被成功匹配。
解决方案
ASP.NET WEB API 的集中式路由和属性路由都支持路由声明可选参数。
在用集中式路由中可以通过 RouteParameter.Optional 指定一个可选参数,RouteParameter.Optional 等同于MVC 中的 UrlParameter.Option。
属性路由,通过在可选参数后面添加一个问好作为后缀。同时,必须为其指定默认值
工作原理
从根本上看,ASP.NET WEB API 支持的可选参数路由其实是默认值路由的一个变种。RouteParamter 在代码片段 3-8 中是一个可变类型。这个示例主要是为了做一个比较,来说明路由可选参数是路由默认值的一个变种。
属性路由中,添加问号后缀路由参数转换为 RouteEntry,使用 RouteParameter.Optional 的默认值。
在运行时,当框架处理 HTTP 请求的时候,如果可选参数没有值,HttpRoutingDispatcher 会移除他们。他是可以支持 /resource 和 /resource/{optionalParameter}。
代码演示
如代码片段 3-9 所示,使用的属性路由定义路由可选参数,这个是允许客户端传参进行基本的分页。
同样的路由,我们可以使用集中式路由如代码片段 3-10 所示定义路由可选参数。