26

Web アプリケーションのカスタム 404 エラー ページを設定しようとしています。問題は、このアプリケーションが多数の異なる環境にデプロイされることです。仮想ディレクトリにある場合とない場合があります。

ErrorPages というディレクトリにエラー ページがあり、次のように構成を設定しました。

   <httpErrors errorMode="Custom" existingResponse="Replace">
     <remove statusCode="404"/>
     <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" />
   </httpErrors>
</system.webServer>

問題は、これを Web サイトのルートにデプロイするときに、その/VirtualDir部分を削除する必要があることです。展開前に削除した場合は、仮想ディレクトリに展開するときに再度追加する必要があります。パスをサイトではなく仮想ディレクトリに相対するように設定する方法はありますか?

を使用してみました~が、次のように機能しません。

   <httpErrors errorMode="Custom" existingResponse="Replace">
     <remove statusCode="404"/>
     <error statusCode="404" path="~/ErrorPages/404.aspx" responseMode="ExecuteURL" />
   </httpErrors>
</system.webServer>
4

2 に答える 2

4

web.config変換を使用して、環境ごとのパスを設定できます。

web.config

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404"/>
  <error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>

web.Release.config

<httpErrors>
  <error statusCode="404" path="/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
于 2012-10-05T12:53:23.377 に答える
2

同様の問題に直面していたので、サーバー側のコードを使用して、動的に生成された URL (仮想ディレクトリの有無にかかわらず) を使用して CustomError ページにリダイレクトしましたが、 ~/ ここから正しいパスに正常にリダイレクトしました。

アプリケーションでエラーが発生すると Application_Error が発生し、最終的に次のコード ブロックが発生します。

if (App.Configuration.DebugMode == DebugModes.ApplicationErrorMessage)
{                    
    string stockMessage = App.Configuration.ApplicationErrorMessage;

    // Handle some stock errors that may require special error pages
    HttpException httpException = serverException as HttpException;
    if (httpException != null)
    {
        int HttpCode = httpException.GetHttpCode();
        Server.ClearError();

        if (HttpCode == 404) // Page Not Found 
        {
            Response.StatusCode = 404;
            Response.Redirect("~/ErrorPage.aspx"); // ~ works fine no matter site is in Virtual Directory or Web Site
            return;
        }
    }

    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = 404;
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

web.config の httpErrors セクションにページ パスを書き込む代わりに、アプリ設定を作成してそこにパスを保存できます。コード ビハインドでは、アプリ設定からパスを取得し、上記のようにリダイレクトできます。

私は別の同様のリンクを見つけました.彼は私よりもうまく説明しているので、それを 読んでください.

于 2012-05-07T11:23:40.987 に答える