20

私のウェブサイトでエラーが発生した場合、私は次のことを行います。

        Server.Transfer("/error.aspx");

そのページにはコードがあります:

protected void Page_Load(object sender, EventArgs e)
{
    ...

    Response.StatusCode = 404;
}

ローカルホストで作業している場合、ページに返された404ステータスとともに、ページに「適切なエラーの説明」が表示されます。

同じコードをインターネットに公開すると、エラーのあるすべてのページが404ステータスコードで表示されますが、コンテンツがありません。代わりに、標準の404エラーメッセージが表示されます。

404 - ファイルまたはディレクトリが見つかりません。

「Response.StatusCode=404」という行がコメントアウトされている場合、適切なページが提供されますが、200のステータスコードがあります。

質問:同時に404エラーステータスコードがあるユーザーフレンドリーなエラーページを返す方法は?

どんな考えでも大歓迎です!よろしくお願いします!

PS ASP.NET 4.0

4

7 に答える 7

19
<customErrors mode="On" defaultRedirect="~/Error/GenericErrorPage.aspx">

     <error statusCode="404" redirect="~/Error/404.aspx" />

</customErrors>

http://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/aa479319.aspx

于 2012-04-12T06:44:01.850 に答える
15

あはは!

これを試して:

Response.TrySkipIisCustomErrors = true;
Response.Status = "404 Not Found";
Response.StatusCode = 404;

ステータス コードを設定する前に追加するとすぐにResponse.TrySkipIisCustomErrors=true、通常のページ コピーが表示され、404 が返されることがわかりました。この行がないと、標準の IIS 404 ページが表示されます。

または、これは次のように web.config で設定できます。

<system.webServer>
    <httpErrors existingResponse="PassThrough">
        // custom error page mappings
    </httpErrors>
</system.webServer>

ここで重要なことは、existingResponse="PassThrough"

これは IIS7 に追加されたため、統合パイプライン モードで実行されているサイトで必要です。

詳細情報: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

人々がまだこれを有用だと思っているので、明確化/詳細情報のために更新を更新してください。シンプルで一般的な 404 ページが必要な場合は、web.config メソッドを使用することに注意してください (プレーンな HTML ページにするのが最適です)。

ここで説明する方法は、特定のページが 404 を返す可能性があるが、訪問者に関連する情報を表示したい、非常に動的または CMS 主導のサイトを持っている場合に最適です。

たとえば、特別オファー ページ (offers/some-offer) は、オファー (some-offer) のルックアップを実行し、存在しない場合は、ボンネットの下に 404 を返しながら、代替または関連するオファーを表示できます。訪問者が知っている限りでは、オファーはもう利用できないと言われましたが、彼らはまだオファー セクションにいますが、URL のインデックスを解除するようにロボットに指示しています. 一般的な 404 ページが 1 つしかない場合、これを行うのは非常に困難です。

于 2013-04-29T11:08:22.607 に答える
4

正しい 404ステータス コードで独自のページを表示するには、次のコードを使用できます。

1) web.config に以下を追加します。

<customErrors mode="On" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.htm" />
</customErrors>

と:

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="404.htm" responseMode="File"/>
</httpErrors>

2) 404.htm ファイルをWeb サイトのルートに追加します。

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>404 - Not Found</title>
    <meta http-equiv="refresh" content="5;url=/404-PAGE" />
  </head>
  <body>
       CONTENT
  </body>
</html>

このファイルの本文にコンテンツを追加して META 更新を削除するか、単に META 更新を使用して CMS 内のページを開くことができます。

于 2014-02-11T13:38:23.307 に答える
2

Jagとadtの回答を組み合わせても、まだ問題がありました。(ASP.NET ではなく) 静的ファイル ハンドラーによって 404 が処理されると、空の応答が返されました。(ステータスは正しくは 404 でした。)

errorMode="Custom"それを修正するには、<httpErrors>要素に追加する必要がありました。エラー ページで ASP.NET を使用している場合は、responseMode="ExecuteURL".

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite" />
</system.web>

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="404" />
        <error statusCode="404" path="/Error.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>
于 2015-11-26T17:58:56.530 に答える