我已经在其他系统中使用.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");
}
}
答案 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();
}
}