快速业务通道

ASP.NET MVC框架 (第二部分): URL路径选择

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
场景 URL Action方法
了应该用来评估一个路径选择规则是否适用于进来的特定请求的Url匹配规则。它还定义了URL应该如何分割成 (tokenized)不同的参数。URL中可替换的参数,是通过 [参数名称] 的句法来定义的。就象在后文论及的那样,我们并不限制于一套固定的 “熟知”参数名称,你可以在URL使用任何数目的任意参数。例如,我可以使用一个"/Blogs/[Username]/Archive/[Year]/ [Month]/[Day]/[Title]"的URL规则把进来的一个博客贴子的URL进行分割,由MVC框架自动分析成UserName,Year,Month,Day 和 Title 参数,并把它们传入我的控制器的action方法中。

Route类上的Defaults属性定义了一个默认值的字典,可以在进来的URL并不包含某个指定的参数值的情形下使用。例如,在上面的URL映射 例子中,我们定义了2个默认URL参数值,一个是"[action]" ,另一个是 "[id]"。这意味着,如果应用收到的是 /Products/ 这个URL,在默认情形下,路径选择系统会默认使用“Index”作为ProductsController的action的名称来执行。同样地 ,如果指定了/Products/List/ ,那么就会使用null字符串作为"ID"参数的值。

Route类的RouteHandler属性定义了在URL被分割成参数,适当的路径选择规则被确定之后,应该用来处理请求的 IRouteHandler 实例。在 上面的例子中,我们表示,我们想要使用System.Web.Mvc.MvcRounteHandler类来处理我们配置好的URL。这个额外的步骤存在的原因是,我们 想确保URL路径选择系统可以同时用于MVC和非MVC请求的情形。有这个IRouteHandler接口,意味着,我们也能够干净地用于非MVC的请求(例如 标准的WebForms,Astoria REST支持等等)。

Route类还有一个Validation属性,在本文的稍后我们会做讨论。这个属性允许我们指定一个路径选择规则匹配需要满足的先决条件。例如 ,我们可以指定一个路径选择规则应该只适用于一个特定的HTTP动词(允许我们轻松地映射REST命令),或者我们可以对参数值使用正则表达 式,来过滤一个路径选择规则是否匹配。

注:在MVC框架的第一个公开预览版中,Route类是不可以扩展的(它只是个数据类),在下一个预览版中,我们正在研究把它做成可扩展的 ,允许开发人员添加特定场景的路径类(譬如,一个RestRoute子类)来干净利索地添加新的语义和功能。

路径规则的评估

当一个进来的URL被ASP.NET MVC Web应用收到时, MVC框架会对RouteTable.Routes集合中的路径选择规则进行评估,以决定适当的 Controller来处理该请求。

MVC框架是按RouteTable规则注册的次序做评估来选择使用哪个Controller的。将进来的URL对每条Route规则做检测,看它是否匹配,如果 一个Route规则匹配的话,那么该规则(以及相关联的RouteHandler)将被用来处理进来的请求(所有后面的规则都略过不计)。这意味着你一 般要按“最特殊到最不特殊(most specific to least specific,从特殊到一般)”的次序来组织你的路径选择规则。

路径选择场景:自定义查询URL

让我们使用一下现实场景中的自定义路径选择规则来对此做一流程示范,以实现我们的电子商务网站的查询功能为例。

开始,我们往我们项目中添加一个新的SearchController类:

ASP.NET MVC框架 (第二部分): URL路径选择

然后,我们在SearchController类中定义2个Action方法。Index()方法用来显示一个查询网页,上有一个文本框,让用户来输入和提交查询 文字。Results() action方法则用来处理相应的表单提交,对数据库做查询,然后把结果显示给用户:

ASP.NET MVC框架 (第二部分): URL路径选择

使用默认的/[controller]/[action]/[id] URL路径映射规则,我们可以现成使用象下面这样的URL来调用我们的SearchController的行为:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号