0

従来のASP.NETテクノロジに基づく従来のWebサイトの1つが新しいホスティングに移行されました。今は、Windows Azure Packを実行するクラウドで、当サイトは.NET Framework 4.6.1で動作しています。ASP.NETのカスタムエラーページでHTTPステータス404を返すことはできません

しかし、正しいHTTPステータス404を持つ存在しない.aspxリソースのカスタムエラーページを返すことはできません。ステータスは常に302です。もともとカスタム404エラーページは、Webでこのように定義されていました。設定:

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <error statusCode="404" redirect="/error/resource-not-found.aspx"/> 
    </customErrors> 
</system.web> 

私はthisなどのSOの記事を読んで、ResponseRewriteにredirectModeの設定を含め、推奨的回答を試みたが、何も助けないか、期待どおりに動作しませんでしたでした。

私は何かを見逃しましたか、それとも別の解決策がありますか?

答えて

0

私はこの問題を克服することができました。まず、Webでエラー404のリダイレクトを無効にしました。設定:

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <!-- <error statusCode="404" redirect="/error/resource-not-found.aspx"/> --> 
    </customErrors> 
</system.web> 

は、その後、私は私のGlobal.asaxに以下のApplication_Errorイベントハンドラを追加しました:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
    Dim serverError As HttpException = DirectCast(Server.GetLastError(), HttpException) 

    If Not serverError Is Nothing Then 
     If 404 = serverError.GetHttpCode() Then 
      Server.ClearError() 
      Server.Transfer("/error/resource-not-found.aspx") 
     End If 
    End If 
End Sub 

は最後に、私は、リソース・見つからない(404ページ私のエラーに以下の行を追加しました。 aspx):

Sub Page_Load() 
    ' If you're running under IIS 7 in Integrated mode set, 
    ' use this line to override IIS errors: 
    Response.TrySkipIisCustomErrors = True 

    Response.StatusCode = 404 
    Response.StatusDescription = "Page not found" 
End Sub 

FYI:MasterPageテクノロジを使用する場合、MasterPageの可変部分だけがリダイレクトされます。私たちのウェブサイトのさまざまなセクションで存在しないリソースを再生した後、私はこの行動が賢明で私たちのエンドユーザにとって有益であることを発見しました。

ワン・モア・シング。非ASPXリソースのHTTPステータスコード404を返すために、私は私のweb.configファイルに次の設定を使用します。

<system.webServer> 
    <httpErrors errorMode="Custom" defaultResponseMode="Redirect"> 
     <remove statusCode="404"/> 
     <error statusCode="404" path="/error/resource-not-found.aspx" responseMode="ExecuteURL"/> 
    </httpErrors> 
</system.webServer> 

ご注意をエラー404

0

私はちょうどグーグルた、あなたはあなた404.aspxページの一番上に

<% Response.StatusCode = 404 %> 

を持っている場合、私は思ったんだけど.aspxの で多くのことを行っていませんか?

+0

私は「ExecuteURL」に設定responseModeへこれをPage_Loadに追加すると404ページに循環無限リダイレクトされます。 – TecMan

1

しかし、私はまだ正しいHTTPステータス404と非既存の.aspxリソースのカスタムエラーページを返すことはできません - ステータスが私の知る限り知られているように、常に302

です、HTTP 302は、要求されたリソースが別の場所に移動されたことを意味します。あなたの説明に基づいて、私はASP.NET Webアプリケーションを作成し、提供したカスタムエラー設定でAzure Web Appにデプロイしました。あなたが要求したリソースが見つからない場合フィドラーや開発ツールを経由して、次のように、あなたはレスポンスヘッダを得ることができるのcustomErrors

のモードオフ

  1. 入れます:ここで

    は私の詳細なテストでありますあなたのブラウザで。

  2. :ユーザーが入力した設定、要求されたリソースが見つからなかった場合、次のように、あなたは詳細情報を得ることができるして[リモート

    としてのcustomErrorsのモードを設定し

テストでは、私の側とAzure Web App。 Fiddler経由で302応答を受け取ったときに、場所のヘッダーを確認してみてください。さらに、リソースが見つからず、ブラウザが404ステータスコードのresource-not-found.aspxページにリダイレクトされることを希望する場合は、これに従うことができます。thread

+0

私はあなたの質問に書いたことをなぜ書き直しましたか?しかし、関連スレッドへのあなたのリンクは、私の問題の部分的な解決策を見つけるのに役立ちました。私の答えを見てください。 – TecMan

関連する問題