[解決済み] ASP.NET カスタム 404 は 404 Not Found の代わりに 200 OK を返します。
質問
Google ウェブマスター ツール用にサイトをセットアップしようとした後、私のカスタム ASP.NET 404 ページが 404 ステータス コードを返さないことに気づきました。それは正しいカスタム ページを表示し、すべてが OK であることをブラウザに伝えました。これは、ソフト404または偽404とみなされます。Googleはこれを好まない。そこで、この問題に関する多くの記事を見つけましたが、私が望む解決策は機能していないようでした。
私が動作させたい解決策は、カスタム404ページのPage_Loadメソッドの後ろのコードに次の2行を追加することです。
Response.Status = "404 Not Found";
Response.StatusCode = 404;
これはうまくいきません。ページは依然として200 OKを返します。しかし、以下のコードをデザインコードにハードコードすると、正しく動作することがわかりました。
<asp:Content ID="ContentMain" ContentPlaceHolderID="ContentPlaceHolderMaster" runat="server">
<%
Response.Status = "404 Not Found";
Response.StatusCode = 404;
%>
... Much more code ...
</asp:content>
このページはマスターページを使用しています。そして、web.configでカスタムエラーページを構成しています。本当はコード ビハインド オプションを使用したいのですが、デザイン/レイアウトにハック インライン コードを置くことなく動作させることができないようです。
どのように解決するのですか?
解決方法です。
問題は、マスター ページの使用にあることが判明しました。ページのライフサイクルの後半でステータス コードを設定することで動作するようになりましたが、明らかにマスター ページのレンダリングによってリセットされていたので、レンダー メソッドをオーバーライドして、レンダリングが完了した後にそれを設定するようにしました。
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
Response.StatusCode = 404;
}
マスターページがステータスを設定するタイミングを正確に知るために、もっと多くの作業を行うことができますが、それはあなたに任せます。
元記事です。
私はテスト Web アプリをうまく動作させることができました。少なくともカスタム エラー ページを表示し、404 ステータス コードを返しました。あなたのアプリの何が問題なのかを伝えることはできませんが、私が何をしたかを伝えることはできます。
1) カスタム エラー用の web.config を編集しました。
<customErrors mode="On"> <error statusCode="404" redirect="404.aspx"/> </customErrors>
2) 404.aspxページを追加し、ステータスコードを404に設定します。
public partial class _04 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.StatusCode = 404; } }
それはそれとして、もし私がAsp.Netによって処理され、存在しない任意のページ拡張に行くと、私のfiddlerログは明らかに404を示し、ここにヘッダがあります。
HTTP/1.1 404 Not Found Server: Microsoft-IIS/5.1 Date: Sun, 07 Dec 2008 06:04:13 GMT X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 533
これで、Asp.Netで処理されないページ、例えばhtmファイルにアクセスすると、カスタムページは表示されず、IISで設定されている404が表示されるようになりました。
私のテストは新しいページにリダイレクトするので、要求されたファイルの URL はほとんど失われます (クエリ文字列の中にあることを除いて)。
Google 404 と .NET カスタム エラー ページ
ヘッダースパイレスポンス。
HTTP/1.1 404 Not Found
Date: Sun, 07 Dec 2008 06:21:20 GMT
関連
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] Ajaxリクエストが200 OKを返すが、successではなくerrorイベントが発生する
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み】ASP.NET MVC 4でカスタムエラーページを動作させる方法
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] ASP.NET MVCのカスタム404エラーページのルーティング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] 2つのリストを結合する
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] IIS7 Response.StatusCodeの設定時にcustomErrorsを上書きしますか?