jsonpを返す一連のアクションを持つコントローラがあります。私の問題は、カスタムエラーを有効にすると、ハードサーバーエラーが発生した場合、jquery ajax呼び出しは「エラー」しないということです。だから、私はコントローラのためだけに、または必要ならば、そのコントローラの各アクションに対してカスタムエラーリダイレクトを無効にする必要があります。ASP.NET MVC 2.0 - コントローラ/アクションのカスタムエラーリダイレクトを無効にする
これらのアクションでのみエラーが発生した場合でもリダイレクトを無効にできますが、エラーコードをクライアントに返して、Ajaxでエラーを処理できるようにする方法はありますか?
編集:
いくつかのコードで拡張します。まず、カスタムエラーの設定を使用しています。
<customErrors mode="RemoteOnly" defaultRedirect="~/Error/ServerError">
<error statusCode="403" redirect="~/Error/AccessDenied" />
<error statusCode="404" redirect="~/Error/NotFound" />
<error statusCode="500" redirect="~/Error/ServerError" />
<error statusCode="999" redirect="~/Error/ServerError" />
</customErrors>
次に、独自の例外レポート属性があります。この属性は、IControllerを実装するベースコントローラクラスに適用されます。私のコントローラはすべてこのベースコントローラを継承しているので、サーバエラーが発生したときにいつでもエラー報告が作成されます。
public sealed class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
RaiseErrorSignal(context.Exception);
}
private static void RaiseErrorSignal(Exception ex)
{
IExceptionHandler handler = Resolve();
handler.HandleError(ex.GetBaseException());
}
private static IExceptionHandler Resolve()
{
return ServiceLocator.Locate<IExceptionHandler>();
}
}
そして、私はこれだけのコントローラでは、この
public JsonpResult DoSomething(string sessionId /*...more params...*/)
{
//Do work
return new JsonpResult() { Data = new { } };
}
のような方法でコントローラを持って/これらのアクションは、私は、エラーコードがクライアントに返されるようにリダイレクトを無効にしたいです。エラーは依然として発生する必要がありますが、何らかの理由でカスタムエラーモードをオフに変更する必要があります。これらは、AJAX呼び出しがある場合
あなたは[HandleErrorAttributeを使用しています](http://msdn.microsoft.com/en-us/library/system.web.mvc.handlerorattribute.aspx)をコントローラー/ベースコントローラー上にインストールするか、単に標準のASP.NET ' 'あなたの設定の要素ですか? –
これは標準カスタムエラーです。私は自分の例外ハンドラを書いてサーバのエラーをメールしてから、アプリケーションが組み込みのリダイレクトを実行できるようにし続けます。リクエストごとにカスタムエラーをプログラマチックに無効にしてコントローラにアタッチする属性を書き込む方法があることを期待していました。 – Josh
特定のコントローラ/アクションまたは特定のアクションタイプ(ajaxメソッド)に対して無効にしますか? – frennky