2013-05-08 20 views
8

ExceptionFilterAttributeで処理された例外をマークする方法はありますか?Web API ExceptionFilterAttributeで設定された例外を設定する

メソッドレベルで例外フィルタを使用して例外を処理し、グローバルに登録された例外フィルタへの伝達を停止したいとします。コントローラのアクションで使用

フィルタ:

public class MethodExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is NotImplementedException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
      // here in MVC you could set context.ExceptionHandled = true; 
     } 
    } 
} 

グローバルに登録フィルタ:

public class GlobalExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is SomeOtherException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.SomethingElse) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
     } 
    } 
} 
+0

「例外フィルタを使用してメソッドレベルで例外を処理する」サンプルを用意してください。 – giacomelli

+0

グローバルフィルタを取得するためには、私が思う最初の方法で例外を処理しなくてはなりません。なぜなら、 'try/catch'ブロックで安全でないコードをラップしてそこで処理するのはなぜですか? –

+0

例が追加されました。 – adamwtiko

答えて

2

お近くの取り扱いの終わりにHttpResponseExceptionを投げてみてください。設計上、例外フィルタによってキャッチされません。

throw new HttpResponseException(context.Response); 
+0

古い回答ですが、もっと処理が行われるのを妨げないことを指摘したかっただけです。 – Tipx