对象引用null-URL重写asp.net

时间:2011-03-31 15:15:45

标签: asp.net url-rewriting object-reference

我已经在其他系统中使用.NET 2.0开发了我的asp.net网站,并且工作正常。现在,当我在我的系统中复制asp.net网站并运行它时,我得到的是运行时错误:

  

对象引用未设置为   对象的实例。

 public class FixURLs : IHttpModule 
{
    public FixURLs()
    {

    }

    #region IHttpModule Members

    public void Dispose()
    {
        // do nothing
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
        context.CompleteRequest(); 

    }

 ..... some other logic

我收到了对象引用错误:

context.CompleteRequest();

我的web.Config文件有

<compilation debug="true">
  <assemblies>
    <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

如何解决此问题?

修改 编辑注释添加了新代码

 void context_BeginRequest(object sender, EventArgs e)
{


    HttpApplication app = (HttpApplication)sender;

    if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "");
    }
    else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
    }
 }

3 个答案:

答案 0 :(得分:4)

我强烈怀疑你想在context_beginrequest方法结束时提出完整请求,因为现在这没有用。如果不是这种情况,请发布该方法,以便明确您要做的事情。

编辑:看起来你打算这样做:

 void context_BeginRequest(object sender, EventArgs e)
{

    HttpApplication app = (HttpApplication)sender;

    if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "");
        app.CompleteRequest(); 
    }
    else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
        app.CompleteRequest(); 
    }
 }

看起来你不想调用CompleteRequest,除非你实际上在BeginRequest中做了些什么。并且要清楚,在原始代码中,您在BeginRequest事件发生之前调用CompleteRequest。

答案 1 :(得分:0)

我认为你应该忽略对context.CompleteRequest();

的号召

这通常意味着停止执行请求,但是当您的应用程序初始化并且没有处理任何请求时,您正在调用它。我的猜测是,在.NET 2.0中,它可以容忍这个调用而不会做任何不好的事情,但在以后的版本中它会爆炸。

在您重写URL之后,我不希望您立即停止请求...否则,为什么要重写它们?所以试着去掉那个方法调用。

答案 2 :(得分:0)

void context_BeginRequest(object sender,EventArgs e) {

HttpApplication app = (HttpApplication)sender;

if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
{
    app.Context.RewritePath("BikeInfo.aspx", "", "");
    app.CompleteRequest(); 
}
else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
{
    app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
    app.CompleteRequest(); 
}
}