ASP.NET 404 httpmodule

私はEPiServerと呼ばれるCMS製品を使用しています。我々は、.NETの標準customErrorsを使用して達成できない404の表示方法を作成する必要があります。 HttpStatusCode のチェックに使用するモジュールを記述しました。これはEndRequestメソッドで行います。

ステータスが404の場合、EPiServerに適切な404ページを照会し、そのページに要求を転送します。しかし、これは404を返しません。そして、私が次のことを行っても正しいステータスは返されません:

HttpContext.Current.Response.StatusCode = 404;
HttpContext.Current.Response.StatusDescription = "Page not Found";
HttpContext.Current.Server.TransferRequest(newPage);

同様に、私が TransferRequest の代わりにresponse.redirectを実行すると、urlが変更されたため、適切な404ではない...

これを行う正しい方法は何ですか?

前もって感謝します アル

2
あなたはこれを試しましたか?> stackoverflow.com/questions/5966613/…
追加された 著者 Davin Tryon,

5 答え

Not a direct answer to your question but could also take a look at this open source 404 handler: https://www.coderesort.com/p/epicode/wiki/404Handler

また、エジサーのナゲットフィードでも入手できます

1
追加された

どのIISバージョンを使用していますか? IIS7または7.5では、次のようなものが必要になるかもしれません。


        
        
        
        

1
追加された

404ページに使用しているテンプレートのコードビハインドにステータスコードを設定する必要があります。

これがプレーンコンテンツページの場合は、新しいテンプレートを作成するか、ステータスコードプロパティをページのロジックに追加してコードのロジックに追加し、適切なヘッダーを送信します。

0
追加された

あなたの応答に感謝します。

私は実際に次のことを行うことでこれを実現しました:

EndRequestイベントハンドラでは、リクエストを正しいEPiServerページに転送し、呼び出しにクエリ文字列のパラメータを含めました。

app.Context.Server.TransferRequest(pageUrl + "&internal=true");

PostRequestHandlerExecuteイベントでは、クエリーストリングのパラメータをチェックします。それが存在する場合は、それが404なので、正しい状態を返します。

HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.StatusDescription = "ページが見つかりません";

魅力のように動作します。

ありがとう ヒグジー

0
追加された

エラーページテンプレートに転送するページのステータスコードを設定してみてください。別のモジュールを持つことが必要であるかどうかはわかりません.Global.asax.csでHttpApplicationのErrorイベントを処理するだけで済みます。

0
追加された