0

商品の詳細ページがあります。製品はクエリ文字列の ID によって取得されます。ID を持つ製品がデータベースで見つかった場合は詳細が表示され、そうでない場合は「このアイテムが見つかりません」というメッセージが表示されます。かなり標準的なもの。私がやりたいことは、「このアイテムが見つかりません」というメッセージを含む詳細ページを表示し、404 応答を送信することです。これは、Google が削除されたアイテムのインデックスを解除するためです。

だから私はこのようなものを持っています(簡略化):

<asp:Panel ID="pnlDetails" runat="server" Visible="false">
    item details go here
</asp:Panel>

<asp:Panel ID="pnlError" runat="server" Visible="false">
    <p>The specified  item could not be found.</p>
</asp:Panel>

And in the code behind:

if(itemFound)
{
   showDetails();
}
else
{
   showError();
}

private void showDetails()
{
   pnlDetails.Visible = true; 
   //fill in details
}

private void showError()
{
    //set response
    Response.StatusCode = 404;
    pnlError.Visible = true;
}

現在何が起こっているかというと、エラー パネルが表示されますが、まだ 200 応答が返されます。誰かが私が間違っていることを教えてもらえますか? アドバイスをいただければ幸いです。どうもありがとうございました。

編集:Page_Loadこれは、イベント ハンドラーでこれらのメソッドを呼び出しています。

4

3 に答える 3

2

なるほど...あなたのコードは404をスローしないので、実際にはあなたもそれを望んでいるので、Googleはデッドリンクを自然にクリーンアップします....これを試してください: stackoverflow.throwing404errorsForMissingParameters

また、これは役に立ちます (下部近く) forums.asp.net/throwing404InHTTPResponse。たとえば、HttpContext.Current.Respone.StatusCode = 404;

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.StatusCode = 404; 
    Response.End(); 
}
于 2012-09-25T14:02:26.963 に答える
1

Googleはそれを言う..

サイトの古いページが検索結果に表示される場合は、そのページのヘッダーで 404 (見つかりません) または 410 (なくなった) のいずれかのステータスが返されることを確認してください。

ここにソースがあります
ので、あなたができること..

  1. アイテムが見つからない場合 - カスタム 404 ページにリダイレクトします。
  2. 404 ページの Page_Load イベントにこれを追加します。

    Response.StatusCode = 404;

しかし、これを行うだけで、HTTP 302 リダイレクト コードが返され、次に HTTP 200 - ok コードが返されます。そのため、ページは Google のインデックスから削除されません。
3. Global.asax ファイルを開きます (存在しない場合は追加します)。次のコードを追加して、404 (ページが見つかりません) エラーを処理します

     protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    if (ex is HttpException)
    {
        if (((HttpException)(ex)).GetHttpCode() == 404)
            Server.Transfer("~/404.aspx");
    }
    Server.Transfer("~/AnyOtherError.aspx");
}

ただし、この場合、404 の web.config に customErrors 構成がないことを確認してください。

于 2012-09-25T12:53:14.833 に答える
1

メソッドにステータス コードを設定すると、次のRenderようになります。

protected override void Render(HtmlTextWriter writer) 
{ 
    base.Render(writer); 
    Response.StatusCode = 404; 
    pnlError.Visible = true;
} 
于 2012-09-25T12:55:33.143 に答える