【发布时间】:2011-07-27 00:10:14
【问题描述】:
我在其他运行良好的系统中使用 .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");
}
}
【问题讨论】:
-
任何帮助将不胜感激
-
您是在本地 IIS 或 Cassini 开发 Web 服务器上运行它吗?
-
我需要查看context_BeginRequest方法中的代码。可以发一下代码吗?
-
@Elad Lachmi 我在一台机器上使用 Visual Studio 2005 运行此应用程序,它运行良好,但是当我将代码复制粘贴到另一台机器并在 Visual Studio 2010 中运行时,我得到了这个错误。
-
@Chris - 我的猜测是 VS2010 中的 Cassini 版本正在向您的代码显示正确的行为。 CompleteRequest 停止对请求的所有处理。委托处理程序然后将请求丢弃在其上是没有意义的。将控制权传递给处理程序与调用方法不同。这不像处理程序被调用,然后控制权回到调用方法。您需要在 context_BeginRequest 方法中完成请求。
标签: asp.net url-rewriting object-reference