ASP.NET MVC框架 (第二部分): URL路径选择
查询表单:
/Search/
Index
查询结果:
/Search/Results?query=Beverages
Results
/Search/Results?query=ASP.NET
Results
注意,根URL /Search 默认映射到Index() action方法的原因是因为在Visual Studio创建一个新项目时,默认添加的 /[controller]/ [action]/[id] 的路径定义将默认的action自动设置到“Index"上的(通过Defaults属性): 虽然象 /Search/Results?query=Beverages 这样的URL是完全可行的,我们也许决定对查询结果我们想要稍微好看些的URL。具体来说,我 们也许想去掉URL中的“Results”action名称,把要查询的文字作为URL的一部分传入,而不是作为URL的查询字符串的值。例如: 场景 URL Action方法 查询表单: /Search/ Index 查询结果: /Search/Beverages Results /Search/ASP.NET Results 我们可以通过在默认的 /[controller]/[action]/[id] 规则之前添加2条自定义的URL路径映射规则来启用这些比较好看的查询结果URL,象 下面这样: 在前2条规则中,我们现在明确地指定了对应 /Search/ URL的控制器和Action参数。我们表明,"/Search" 应该总是由 SearchController上的“Index” action来处理。而任何拥有子URL层次结构的URL (/Search/Foo, /Search/Bar等等 )则总是由 SearchController上的 "Results" action 来处理。 上面的第二条路径选择规则表明,在 /Search/ 前缀之后的任何字符应该当作名为"[query]"的参数来处理,这个参数将作为方 法参数来传入SearchController上的Results action方法中: 最有可能的,我们还会对查询结果启用分页(我们每次只显示10个查询结果)显示。我们可以通过查询字符串值的方法来实现(譬 如,/Search/Beverages?page=2),或者我们也可以把页号嵌在URL中(譬如/Search/Beverages/2)。要支持后面这个做法的话,我们需要做 的是,给我们的第二条路径选择规则再加一个额外的可省参数: 注意,上面的新URL规则现在匹配的是“Search/[query]/[page]"。我们还将默认的页号配置为1,万一页号没有包含在URL之中 的话(这是通过作为“Defaults”属性值的匿名类型传入的)。 然后我们可以把我们的SearchController.Results action方法更新为接受页号参数作为一个方法参数: 这样,我们就有比较好看的查询URL了(剩下的就是实现这个查询算法,我将把它作为练习留给读者来完成 <g>)。 路径选择规则的验证先决条件 就象我在这个贴子前面提到的,Route类有个Validation属性,允许你添加为使路径选择规则匹配,必须为真的验证先决条件规则(除了URL 过滤外)。ASP.NET MVC框架允许你使用正则表达式来验证URL中的参数值,也允许你对HTTP Headers进行评估(根据HTTP动词的不同进行不同 的URL路径选择)。 下面是一个我们可以用到象 /Products/Detail/43 这样的URL身上的自定义的验证规则,它指定了其中的ID参数必须是数字(不允许字符串 ),而且它的长度必须在1到8之间: 如果我们往应用中传入象 /Products/Detail/12 这样的URL,上面的路径选择规则是合法的,但如果传入 /Products/Detail/abc 或 /Products/Detail/23232323232,它就 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |