对于您不希望检查的传入的HTTP数据的情况,请求验证类可以退让给ASP.NET的默认请求验证部分—这是通过简单地调用base.IsValidRequestString实现的。
八、对象缓存和对象缓存扩展
自第一个版本发行以来,ASP.NET提供了一个功能强大的内存对象缓存(System.Web.Caching.Cache)。缓存应用非常受欢迎,即使在非Web应用程序中也被广泛应用。但是,仅为了能够使用ASP.NET对象缓存而在一个Windows窗体或WPF应用程序中包括对于System.Web.dll程序集的引用这真是一件令人尴尬的事情。
为了使所有应用程序都能够利用缓存,.NET Framework 4引入了一个新的程序集,一个新的命名空间,一些基本类型和一个具体的缓存实现。新程序集System.Runtime.Caching.dll中在System.Runtime.Caching命名空间中包含了一个新的缓存API。该命名空间包含了两个核心的类集:
? 为定制缓存实现提供了一些具备基本功能的抽象类型。
? 提供了一个具体的内存对象缓存实现(即System.Runtime.Caching.MemoryCache类)。
新的MemoryCache类的建模方式极类似于ASP.NET缓存,其中使用了相当部分的ASP.NET中的内部缓引擎逻辑。虽然已经更新System.Runtime.Caching中的公共缓存API以支持开发自定义缓存,但是如果您使用ASP.NET Cache对象的话,那么你在使用新的API过程中会发现许多熟悉的概念。
要深入讨论新的MemoryCache类和相应的基本支持API,你需要参考其他更完整的文档。但是,下面的例子让你对新的缓存API的使用方式有一个大致的了解。注意,这个例子是一个Windows窗体应用程序的一部分,其中并没有依赖于System.Web.dll程序集。
{
//Obtain a reference to the default MemoryCache instance.
//Note that you can create multiple MemoryCache(s) inside
//of a single application.
ObjectCache cache = MemoryCache.Default;
//In this example the cache is storing the contents of a file string
fileContents = cache["filecontents"] as string;
//If the file contents are not currently in the cache, then
//the contents are read from disk and placed in the cache.
if (fileContents == null)
{
//A CacheItemPolicy object holds all the pieces of cache
//dependency and cache expiration metadata related to a single
//cache entry.
CacheItemPolicy policy = new CacheItemPolicy();
//Build up the information necessary to create a file dependency.
//In this case we just need the file path of the file on disk.
List<string> filePaths = new List<string>();
filePaths.Add("c:\\data.txt");
//In the new cache API, dependencies are called "change monitors".
//For this example we want the cache entry to be automatically expired
//if the contents on disk change. A HostFileChangeMonitor provides
//this functionality.
policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
//Fetch the file's contents
fileContents = File.ReadAllText("c:\\data.txt");
//And then store the file's contents in the cache
cache.Set("filecontents", fileContents, policy);
}
MessageBox.Show(fileContents);
}