2017-02-07 7 views
0

すべてのエラーに対してjsonエラー応答を生成するために使用するカスタムオブジェクトを作成しました。私が抱えている問題は、私がキャッチすることができないいくつかのエラーがあるということです。私はアクションを呼び出ししようとした場合たとえば、デフォルトの応答があるGETサポートしていないことASP.NETすべての標準HTTPエラー応答をオーバーライドします。

{「メッセージ」:「要求されたリソースは、 『GET』 HTTPメソッドをサポートしていません」}

これは問題ありませんが、フォーマットを制御したいです。私はこのようなすべての単一の自動化されたエラーを制御したいので、何も出力されないようにすることができます。私は、コード例外が発生した場合、クライアントに正常に知らせる必要があります。

これは私が探しているようですが、これには一致するアクションがないのでエラーをキャッチしているようです。 How to override all standard error pages in WebAPI

私はこれを実装しようとしましたが、メインコントローラでこれを持っていても、上記と同じエラーメッセージが表示されます。

[AllowAnonymous] 
[ActionName("405")] 
[HttpGet] 
public string Status405() 
{ 
    return "error"; 
} 

私はONERRORイベントまたはすべてのように私はすべてのものをオーバーライドすることができますキャッチとして作用する何かがあるだろう期待していました。私は、このdoesntの仕事のどちらかHttpResponseEx

public class ErrorFilter : System.Web.Http.HttpResponseException 
{ 
    public override string Message 
    { 
     get 
     { 
      return "My custom response based on whatever params are in this error"; 
     } 
    } 
} 

をオフに基づいて作業しようとしましたが、それが引き金を取得任意のイベントを活用does notのようなぜ私は見ることができます。

確かにこれを行う方法があります。それはどのようにして正常に行われますか?

答えて

0

web.configでは、カスタムエラーをオンにする必要があります。デフォルトでは、リモートに設定されています。これにより、開発者はスタックトレースとエンドユーザが素晴らしいエラーページを参照できるようになります。これをオンにします。詳細についてはこちらを参照してください。https://msdn.microsoft.com/en-us/library/h0hfz6fc(v=vs.85).aspx

+0

これは、IISが処理するメッセージにのみ適用されますか?たとえば、誰かがディレクトリにアクセスしようとすると、iisは403を表示します。このシナリオでは、実際のコントローラはIISではなくこの応答を生成しているようです。 –

+0

有効なポイント。あなたのglobal.asaxファイルで何かを確認してください。 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } これに基づいてhttp://stackoverflow.com/questions/8128302/custom-error-handler-for-http-error-405-in-mvc –

関連する問題