4

正常に動作している他のシステムで、.NET 2.0 で asp.net Web サイトを開発しました。システムにasp.net Webサイトをコピーして実行すると、実行時エラーが発生します。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

 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>

この問題を解決するにはどうすればよいですか?

EDIT 編集 注新しいコードが追加されました

 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");
    }
 }
4

3 に答える 3

4

context_beginrequest メソッドの最後に completerequest を置きたいと強く思うでしょう。今のところこれはあまり意味がないからです。そうでない場合は、その方法も投稿して、何をしようとしているのかが明確になるようにしてください。

編集:あなたの意図はこれを行うことのようです:

 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(); 
    }
 }

BeginRequest で実際に何かを実行していない限り、CompleteRequest を呼び出す必要はないようです。明確にするために、元のコードでは、BeginRequest イベントが発生する前に CompleteRequest を呼び出しています。

于 2011-04-06T06:01:28.597 に答える
0

void context_BeginRequest(オブジェクト送信者, 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(); 
}
}
于 2017-01-02T17:03:20.017 に答える
0

への電話はやめたほうがいいと思いますcontext.CompleteRequest();

これは通常、リクエストの実行を停止するためのものですが、アプリケーションが初期化中でリクエストが処理されていないときに呼び出しています。私の推測では、.NET 2.0 ではこの呼び出しを許容し、悪いことは何もしませんが、それ以降のバージョンでは爆発します。

URL を書き換えた直後にリクエストを停止したいようには見えません...そうでなければ、なぜ URL を書き換える必要があるのでしょうか? そのため、そのメソッド呼び出しを取り除いてみてください。

于 2011-04-12T18:40:10.053 に答える