首页 > 代码库 > 关于URLRewriter报错:System.NullReferenceException: 未将对象引用设置到对象的实例 的解决

关于URLRewriter报错:System.NullReferenceException: 未将对象引用设置到对象的实例 的解决

检查网站日期,发现内容如下:
System.NullReferenceException: 未将对象引用设置到对象的实例。 在 URLRewriter.ModuleRewriter.Rewrite(String requestedPath, HttpApplication app) 在 URLRewriter.BaseModuleRewriter.BaseModuleRewriter_AuthorizeRequest(Object sender, EventArgs e) 在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

URLRewriter是一个开源的Url重写的东东,当然现在可能用的人少了。
网上找到一篇类似的:http://www.cnblogs.com/notus/archive/2007/07/04/710493.html,不过貌似他的问题是在应用层去解决的。
所以看还是看了下URLRewriter的源码。

修改如下,上代码,不说话。
+ View Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static RewriterConfiguration GetConfig()
{
    //old
    //if (HttpContext.Current.Cache["RewriterConfig"] == null)
    // HttpContext.Current.Cache.Insert("RewriterConfig", ConfigurationSettings.GetConfig("RewriterConfig"));
 
    //return (RewriterConfiguration) HttpContext.Current.Cache["RewriterConfig"];
 
    //第一次改动:以为被GC回收了,加个引用。发现还是有错,想当然了。
    //var tmp=HttpContext.Current.Cache["RewriterConfig"];
    //if (tmp == null)
    //{
    // HttpContext.Current.Cache.Insert("RewriterConfig", ConfigurationSettings.GetConfig("RewriterConfig"));
    // tmp = (RewriterConfiguration)HttpContext.Current.Cache["RewriterConfig"];
    //}
    //return (RewriterConfiguration)tmp;
 
    //第二次改动
    if (HttpContext.Current.Cache["RewriterConfig"] == null)
    HttpContext.Current.Cache.Insert("RewriterConfig", ConfigurationSettings.GetConfig("RewriterConfig"),null,DateTime.MaxValue,Cache.NoSlidingExpiration);
 
    return (RewriterConfiguration)HttpContext.Current.Cache["RewriterConfig"];
}