.NET 4.0改进的介绍
核心服务
大部分的新特性都是围绕自定义和扩展来的,原先不能自定义的东西现在可以自定义了,可以自己扩展了,然后把自己的组件在web.config中配置即可应用我们自己的组件。
Web.Config精简
.NET框架4.0中会把大部分配置放到machine.config中,这样在web.config中甚至可以一行代码都不写。
自定义输出缓存策略
输出缓存对于改善性能有很大好处,在ASP.NET 4.0中可以自定义输出缓存的策略,比如把输出保存在磁盘中,外部的memcached服务中等等。甚至还可以定义一些高级规则,比如为A页面使用A输出缓存策略来把数据保存于内存中,为B页面使用B输出缓存策略来把数据保存于磁盘中。
<caching>
<outputCachedefaultProvider="AspNetInternalProvider">
<providers>
<addname="DiskCache"
type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
</providers>
</outputCache>
</caching>
自启动的应用程序
ASP.NET 4.0和IIS 7.5配合可以设定一个预处理的Provider,这样在应用程序池启动或回收后IIS会自动调用这个Provider中的代码来处理,处理完毕之后才接受请求。
<preloadProviders>
<addname="PrewarmMyCache"
type="MyNamespace.CustomInitialization, MyLibrary" />
</preloadProviders>
永久重定向
如果使用Response.Redirect的话,返回302状态,客户端再发送一次请求到新的地址,在ASP.NET 4.0中提供了RedirectPermanent方法来永久重定向到某个地址。客户端或搜索引擎遇到301状态码会保存这个永久重定向地址,以后会直接访问定向后的地址,节省了一次往返。
压缩会话数据
如果使用进程外Session或SQL Server保存Session的话,会话数据需要进行序列化和反序列化,ASP.NET 4.0提供了使用GZIP压缩会话数据的特性来缩小会话数据流的大小。
<sessionState
mode="SqlServer"
sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"
allowCustomSqlDatabase="true"
compressionEnabled="true"
/>
URL规则
在ASP.NET 4.0中可以自定义访问路径以及QueryString的长度,并且还可以设定路径中无效的字符,而在以前这些都不是可以定制的。
<httpRuntime requestPathInvalidChars="<,>,*,%,&,:,\" maxRequestPathLength="260" maxQueryStringLength="2048"/>
自定义RequestVaidation
RequestValidateion虽然可以有效防止XSS注入等,但在以前验证规则是不可以自定义的,很多时候我们觉得这个规则太严格了只能关闭这个功能。在ASP.NET 4.0中可以自定义类来实现自己的验证规则。
<httpRuntime requestValidationType="Samples.MyValidator, Samples" />
对象缓存
System.Web.Caching.Cache大家很熟悉,甚至有的时候编写Windows和Windows服务程序的时候也会引用System.Web.dll来使用这个Cache功能。在4.0中这个功能在System.Runtime.Caching.dll中会有新的实现,并且也会更强大。
自定义Encoding
URL Encoding/HTML Encoding都是很常用的功能,在ASP.NET 4.0中我们可以继承System.Web.Util.HttpEncoder来自定义编码规则。
<httpRuntime encoderType="Samples.MyCustomEncoder, Samples"/>
AppDomain级别的性能检测
如果在一个进程中运行多个网站的话我们可能希望能监视到每一个网站的性能,在ASP.NET 4.0中我们可以开启AppDomain级别的性能检测。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<runtime>
<appDomainResourceMonitoring enabled="true"/>
</runtime>
</configuration>