2

要求されたコンテンツが見つからない場合に404​​ページにリダイレクトされるASP.NETアプリがあります。これは次のように行われます。

var data = MyDatabase.RetrieveData(dataID);
if (data == null)
   Response.Redirect("~/My404Page.aspx");

これはユーザーにとって素晴らしい働きをします。ただし、結果として302 Found(リダイレクト)ではなく404 Not Found、検索クローラーには理想的ではありません。404ステータスコードを返し、ユーザーに役立つコンテンツを表示したいのですが。

有名なインターネットの最も厄介な404ページがこれを行います。そのドメインに不正なURLを入力し、Fiddlerのようなもので結果を見ると、実際には404コードが返されます。

私はこれを試しました:

Response.StatusCode = 404;

これにより、404コードが適切に設定されますが、ページのレンダリングは続行されます。私もこれを試しました:

throw new HttpException(404, "Not Found");

ただし、これは、他のキャッチされない例外の場合と同じことを行います(302サーバーエラーページにリダイレクトします)。

自分でステータスコードを設定し、応答へのjavascriptリダイレクトを作成することを含むカスタムロジックを介して、アプリでこれを解決する方法を見つけました。しかし、私が望んでいるのは、このリクエストが処理を停止し、404エラーページ(IISまたはweb.configのいずれかで指定できると信じています)にリダイレクトする必要があることをコードビハインドで表現する方法です。これは可能ですか?

4

2 に答える 2

2

302リダイレクトが必要ない場合は、Repsonse.RedirectではなくServer.Transferを実行する必要があります。Response.Redirect()は、ブラウザに応答を送り返し、〜/My404Page.aspxをロードするように指示します。Server.Transfer()は、ブラウザに戻らずに制御を〜/ My404Page.aspxに転送します。これは、ブラウザが302リダイレクトメッセージを受け取らないことを意味します。

また、404ページでResponse.StatusCodeプロパティを404に設定していることを確認する必要があります。

または、HttpExceptionをスローした場合、redirectModeプロパティをResponseRewriteに設定することで、サーバーで302を実行せずにカスタム404ページにリダイレクトできます。これは、ASP.NETの新しいバージョンでのみ機能します。

于 2012-07-19T21:16:12.963 に答える
1

CustomErrorsWebアプリケーションで属性を使用します' web.config

<configuration>
  <system.web>
    <customErrors defaultRedirect="GenericError.htm"
                  mode="RemoteOnly">
      <error statusCode="404"
             redirect="My404Page.aspx"/>
    </customErrors>
  </system.web>
</configuration>
于 2012-07-19T21:15:29.657 に答える