我有一个控制器,其中包含一系列返回 jsonp 的操作。我的问题是启用自定义错误后,当出现硬服务器错误时,我的 jquery ajax 调用不会“错误”。因此,我需要仅为控制器禁用自定义错误重定向,或者如果必须,为该控制器中的每个操作禁用自定义错误重定向。
有什么方法可以在仅在这些操作上发生错误时禁用重定向,但仍向客户端返回错误代码以便 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 { } };
}
仅在此控制器/这些操作上,我想禁用重定向,以便将错误代码返回给客户端。仍然需要抛出错误,但不知何故,自定义错误模式需要更改为仅针对此请求和请求持续时间的关闭。