jsonp を返す一連のアクションを持つコントローラーがあります。私の問題は、カスタムエラーが有効になっていると、ハードサーバーエラーが発生してもjquery 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 { } };
}
このコントローラー/これらのアクションでのみ、リダイレクトを無効にして、エラー コードがクライアントに返されるようにします。エラーは引き続きスローする必要がありますが、何らかの方法でカスタム エラー モードをオフに変更する必要があります。