ASP.NET MVC路由扩展:路由映射
2012-03-26 11:39:19 来源:WEB开发网核心提示: 当我们通过Visual Studio的ASP.NET MVC项目模版创建一个Web应用的时候,在的Global.asax文件中会生成如下的代码通过调用AreaRegistration的静态方法RegisterAllAreas实现对所有Area的注册,ASP.NET MVC路由扩展:路由映射(6),也就是说针对所有Ar
当我们通过Visual Studio的ASP.NET MVC项目模版创建一个Web应用的时候,在的Global.asax文件中会生成如下的代码通过调用AreaRegistration的静态方法RegisterAllAreas实现对所有Area的注册,也就是说针对所有Area的注册发生在应用启动的时候。
1: public class MvcApplication : System.Web.HttpApplication
2: {
3: protected void Application_Start()
4: {
5: AreaRegistration.RegisterAllAreas();
6: }
7: }
AreaRegistration的缓存
Area的注册(主要是基于Area的路由映射注册)通过具体的AreaRegistration来实现。在应用启动的时候,为了实现对所有Area的注册,需要遍历通过调用BuildManager的静态方法GetReferencedAssemblies方法得到的程序集列表,并通过从中找到所有AreaRegistration类型。如果一个应用涉及到太多的程序集,这个过程可能会耗费很多时间,为了提供性能,基于AreaRegistration类型列表的缓存被采用。
注:BuildManager的静态方法GetReferencedAssemblies返回所有页编译都必须引用的程序集引用的列表,这包括包含 Web.config 文件的<system.web>/<compilation>/<assemblies>配置节中指定的用于编译Web应用所使用的程序集和从 App_Code 目录中的自定义代码生成的程序集以及其他顶级文件夹中的程序集。
ASP.NET MVC对AreaRegistration类型列表的缓存是基于文件的。具体来说,当通过程序集加载和反射得到了所有的AreaRegistration类型列表后,会将其进行序列化并被保存为一个XML物理文件,这个名为MVC-AreaRegistrationTypeCache.xml的XML文件被存放在ASP.NET的临时目录下,具体的路径如下。其中第一个针对寄宿于IIS中的Web应用,后者针对直接通过Visual Studio Developer Server作为宿主的应用。
%Windir%\Microsoft.NET\Framework\v{version}\Temporary ASP.NET Files\{appname}\...\...\UserCache\
%Windir%\Microsoft.NET\Framework\v{version}\Temporary ASP.NET Files\root\...\...\UserCache\
下面的XML片断体现了这个作为所有AreaRegistration类型缓存的XML文件的结构,从中我们可以看到所有的AreaRegistration类型名称,连同它所在的托管模块和程序集名称都被保存了下来。当调用AreaRegistration的静态方法RegisterAllAreas被调用之后,系统会试图加载该文件,如果该文件存在并且具有期望的结构,那么将不在通过程序集加载和反射来解析AreaRegistration的类型,而是直接对文件内容进行反序列化从而得到所有AreaRegistration类型的列表。
1: <?xml version="1.0" encoding="utf-8"?>
2: <!--This file is automatically generated. Please do not modify the contents of this file.-->
3: <typeCache lastModified="3/22/2012 2:58:47 PM" mvcVersionId="80365b23-7a1d-42b2-9e7d-cc6f5694c6d1">
4: <assembly name="Artech.Admin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
5: <module versionId="07be22a1-781d-4ade-bd22-34b0850445ef">
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
- ››asp获取毫秒数
- ››asp.net报“INSERT INTO 语句的语法错误解决
更多精彩
赞助商链接