2017-07-11 3 views
0

例外フィルタを使用しています。リンク後ExceptionFilter OnExceptionが呼び出されていません

https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling#httpresponserexception

私はその後、私は私のコントローラ上の単一のメソッドに属性を使用

public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is NotImplementedException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); 
     } 
    } 
} 

をクラスを作成しました。私はフィルタをグローバルに追加していませんでした。なぜなら、今のところ単一のメソッドで動作させたいからです。

public class HomeController : Controller 
{ 
    [NotImplExceptionFilter] 
    public void Test() 
    { 
     throw new NotImplementedException("This method is not implemented"); 
    } 
} 

しかし、エラーが発生するたびにOnExepctionは呼び出されません。何が紛失しているのか教えてください

答えて

0

Controllerクラスの代わりにApiControllerを継承していると思います。

この属性にはSystem.Web.Http名前空間が使用されているため、Apiコントローラでのみ動作します。

あなたが同様に他のコントローラを使用する場合は、別の例外フィルター属性を追加する必要がありますが、その場合にはSystem.Web.Httpを使用しますが、System.Web.Mvc名前空間を使用し、他の部分は、ほぼ同じコード(のみいくつかの小さな変更になりますいけない

OnExceptionをもう一度書き換えてそこにロジックを入れますが、実際にエラーメッセージをどのように表示するかは、これら2つの方法が異なります。最初はメッセージを表示するために応答を使用し、もう1つは別の方法で実装する必要があります。おそらくこの1つを見てくださいhere

+0

できません。なぜなら私のコントローラにはビューを使っているいくつかのアクションがあり、それはapicontrollerを使うとエラーになるからです。例外処理はApiControllerでのみ機能しますか? –

+0

この場合は、現在 'System.Web.Http'名前空間を使用しているため、fot apiコントローラのみが動作します。 –

+0

hmmですが、私はApiControllerにないControllerでエラー処理を使用できる方法がありますか? –

関連する問題