All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
使用SQL存储过程有什么好处_[SQL,Server教程]
Visual C++ 6.0教程:函数重载概述
ASP.NET,2.0,树型数据的显示源代码(递归)_[Asp.Net教程]
PHP实例:用PHP实现XML备份Mysql数据库_[PHP教程]
不用改文件名,防止IIS文件被下载方法_[Asp.Net教程]
ASP.NET中“找不到指定模块”的解决办法_.net资料_编程技术
ASP.NET技巧:dot,net,html分析类库_.net资料_编程技术
C#+低级Windows,API钩子拦截键盘输入_[Asp.Net教程]
服务器响应HTTP的类型ContentType大全_JavaScript技术_编程技术
PHP入门:初学来看配置文件PHP.INI的中文注释_php资料_编程技术
Reading number is top 10 pictures
非常漂亮的泳装美女
机器人也有性生活吗?
Sora aoi mirror memorial classics1
奇趣的世界记录1
A man's favorite things15
In the world the most mysterious 21 place landscape4
The little girl with long hair1
Fury xp desktop theme
Female model behind the bitterness, often being overcharged5
大年初五接财神
Download software ranking
Professional killers2 data package
天龙八部最新服务端
打鸟视频
虚拟机汉化软件
SP3 for SQL2000
c#程序设计案例教程
超级战舰
Tram sex maniac 2 (H) rar bag16
White deer villiage
Boxer's Top ten classic battle3
归海一刀 published in(发表于) 2014/1/30 0:52:38 Edit(编辑)
ASP.NET,MVC,Framework体验(5):路径选择(URL,Routing)_[Asp.Net教程]

ASP.NET,MVC,Framework体验(5):路径选择(URL,Routing)_[Asp.Net教程]

ASP.NET MVC Framework体验(5):路径选择(URL Routing)_[Asp.Net教程]


概述


在传统的ASP.NET应用程序中,发生一个请求之后将映射到一个.aspx文件,且会对应到一个具体的物理aspx文件。ASP.NET MVC Framework中,进入一个请求之后,不再是映射到.aspx文件,而是由MVC Framework中提供的路径选择引擎,映射到正确的Controller和Action执行请求。ASP.NET MVC Framework中URL路径映射规则定义在Global.asax中,这在一定程序上带来了很多的灵活性,如果想要修改URL应用结构的话,只需要修改一下映射规则即可,并不需要修改Controller和View中的代码,但是这仍然不够灵活。改变Global.asax代码仍然会导致应用程序的重新编译,本篇文章末尾部分将会介绍如何通过HttpModule定义映射规则在Web.config中。


理解路径选择


先看一下下面这幅图:


TerryLee_MVC_010


从上图中可以看到,发生一个请求之后,第一步就是路径选择,而映射规则是通过在Routes集合中添加Route实例来注册的,如:


RouteTable.Routes.Add(
new Route
{
Url = "[controller]/[action]",
Defaults = new { action = "Index"},
RouteHandler = typeof(MvcRouteHandler)
});

Route中有四个属性,它的定义如下:


public class Route
{
public Route();
public Route(string url, Type routeHandler);
public Route(string url, object defaults, Type routeHandler);
public object Defaults { get; set; }
public Type RouteHandler { get; set; }
public string Url { get; set; }
public object Validation { get; set; }
}

其中:


Url指定了请求的Url匹配规则,还定义了URL应该如何分割成(tokenized)不同的参数,URL中可替换的参数,是通过 [参数名称] 的句法来定义的。


Defaults属性定义了一个默认值的字典,可以在进来的URL并不包含某个指定的参数值的情形下使用。


RouteHandler属性定义了在URL被分割成参数,适当的路径选择规则被确定之后,应该用来处理请求的 IRouteHandler 实例。


Validation属性允许我们指定一个路径选择规则匹配需要满足的先决条件,如对参数值使用正则表达式,来过滤一个路径选择规则是否匹配。


II6与II7的区别


在使用ASP.NET MVC Framework时,要注意一点II6和II7的区别,如果在II7下,不需要使用.mvc扩展名,路径选择规则可以如下所示:


RouteTable.Routes.Add(
new Route
{
Url = "[controller]/[action]/[id]",
Defaults = new { action = "Index", id = (string)null },
RouteHandler = typeof(MvcRouteHandler)
});

而在II6下,控制器名后面必须要有.mvc扩展名:


RouteTable.Routes.Add(
new Route
{
Url = "[controller].mvc/[action]/[id]",
Defaults = new { action = "Index", id = (string)null },
RouteHandler = typeof(MvcRouteHandler)
});


路径选择规则的验证


在本文第二节我们提到过Route的一个Validation属性,允许我们指定一个路径选择规则匹配需要满足的先决条件。如下代码段所示,验证Id必须为整数且长度在1到8之间:


RouteTable.Routes.Add(
new Route
{
Url = "Blog.mvc/Detail/[id]",
Defaults = new { controller = "Blog", action = "Detail" },
Validation = new { id=@"\d{1,8}" },
RouteHandler = typeof(MvcRouteHandler)
});


自定义RouteHandler


在ASP.NET MVC Framework中,提供了很好的扩展功能,如我们可以自定义RouteHandler来实现在Web.config中配置ControllerFactory和ViewFactory。在ASP.NET MVC Framework中,自定义RouteHandler只需要实现IRouteHandler接口并实现GetHttpHandler方法,它的定义如下:


public interface IRouteHandler
{
IHttpHandler GetHttpHandler(RequestContext requestContext);
}

Fredrik在它的Blog上写了一个完整的示例,有兴趣的朋友可以参考一下。

在Web.config中定义路径选择规则

ASP.NET MVC Framework中路径选择规则定义在Global.asax中的Application_Start方法中,当映射规则发生改变时,如果修改了Application_Start中的代码,必将导致整个应用程序的重新编译,我们完全可以通过HttpModule来实现把映射规则放在配置文件中。如下示例代码所示:
public class RouteBuilder : IHttpModule
{
public void Init(HttpApplication application)
{
RouteConfiguration routeConfig =
(RouteConfiguration)System.Configuration.ConfigurationManager.GetSection("RouteTable");
foreach (RouteElement routeElement in routeConfig.Routes)
{
Route currentRoute = new Route();
currentRoute.Defaults = new DefaultsType(routeElement.Defaults);
currentRoute.Url = routeElement.Url;
currentRoute.RouteHandler = typeof(MvcRouteHandler);
RouteTable.Routes.Add(currentRoute);
}
}
public void Dispose()
{
}
}

在CodePlex上,已经有了做了这样的开源项目,地址为:http://www.codeplex.com/RouteBuilder,有兴趣的朋友参考一下。

结束语


关于ASP.NET MVC Framework中的路径选择就简单的介绍到这儿了,其实本篇文章后两节都是在推荐一些学习的资料,而关于路径选择的详细内容,在ScottGu的文章里已经写的很仔细了。

作者:TerryLee
出处:http://terrylee.cnblogs.com





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.