2

私の Web.config にはあります。

<customErrors mode="On" defaultRedirect="~/Errors/Unknown">
  <error statusCode="403" redirect="~/Errors/Forbidden"></error>
  <error statusCode="404" redirect="~/Errors/NotFound"></error>
</customErrors>

存在しないページを開こうとするとうまくいきます。(カスタム エラー ページ ErrorsController.NotFound にリダイレクトされます)。未処理の例外が発生したとき (この場合は LINQ Signle(...))。~/Errors/Unknown には移動しませんが、デフォルトのメッセージが表示されます。

エラー。リクエストの処理中にエラーが発生しました。

ErrorsController.Unknown に置き換えるにはどうすればよいですか?

4

1 に答える 1

3

この質問のおかげで、これを行う方法がわかりました。以下のコードは、受け入れられた回答とほぼ同じです。この変更では、HttpExceptions も処理されません。

動作させるための手順:

  1. web.config の customErrors 要素が無視されるようになりました
  2. 以下のメソッドを Global.axax に貼り付けます。

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Response.Clear();
    
        var httpException = exception as HttpException;
    
        if (httpException != null)
        {
            string action;
    
            switch (httpException.GetHttpCode())
            {
                case 404:
                    // page not found
                    action = "NotFound";
                    break;
                case 403:
                    // forbidden
                    action = "Forbidden";
                    break;
                case 500:
                    // server error
                    action = "HttpError500";
                    break;
                default:
                    action = "Unknown";
                    break;
            }
    
            // clear error on server
            Server.ClearError();
    
            Response.Redirect(String.Format("~/Errors/{0}", action));
        }else
        {
            // this is my modification, which handles any type of an exception.
            Response.Redirect(String.Format("~/Errors/Unknown")); 
        }
    }
    
于 2013-07-29T07:57:50.627 に答える