2011-12-09 3 views
1

私はエラー処理を見ています。私は次のコードを見つけました:MVCでアプリケーションエラーと呼ばれるものは何ですか?

protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = this.Server.GetLastError(); 

     this.Response.Clear(); 
     this.Server.ClearError(); 

     var errorRoute = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current)); 
     var tenant = errorRoute.Values["tenant"].ToString(); 

     var route = new RouteValueDictionary 
     { 
      { "controller", "Error" }, 
      { "action", "Index" }, 
      { "tenant", tenant } 
     }; 

     if (exception != null) 
     { 
      route.Add("message", exception.Message); 
     } 

     this.Response.RedirectToRoute(route); 
    } 

しかし、application_errorの原因は何ですか?これは、データベースに重複したエントリがある場合や、何らかの種類のシステム例外の場合のように、ユーザーが生成したものでしょうか?

+0

私の答えは役に立ちましたか? –

+0

誰かの回答があなたの質問に答えた場合は、[回答](http://meta.stackexchange.com/a/5235/171243)の横のチェックマークをクリックすることを忘れないでください。 –

答えて

3

Application_Errorメソッドは、アプリケーションがスローするすべての例外を処理します。

if(entriesDuplicated) 
{ 
    throw new Exception("The message that describes the error"); 
} 

それはApplication_Error方法で処理されます:あなたが重複したエントリのようなカスタム状況を処理したい場合は、このような例外をスローすることができます。

4

@cebirciがあなたの質問に答えました。しかし、MVCでエラーを処理する方法が組み込まれているため、MVCでApplication_Errorを使用することを強くお勧めします。

まず、[HandleError]というアトリビュートがあり、コントローラやアクションを飾ることができます。未処理の例外がキャッチされるたびにビューShared\Error.cshtmlがレンダリングされます。

[HandleError]の問題は、Not Found(404)を処理できないことです。 404を処理するには、エラーコントローラを作成し、web.configでcustomErrorsを設定する必要があります。

my blogで詳しく説明します。

関連する問題