我有一个控制器与一系列返回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 { } };
}
方法仅此控制器控制器/这些行动,我要禁用重定向,以便错误代码返回给客户端。错误仍然需要抛出,但不知怎的,自定义错误模式只需要将此请求更改为关闭,并且仅限于请求的持续时间。
您使用的是[HandleErrorAttribute ](http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx),或者它只是标准的ASP.NET` `元素在你的配置? –
2011-01-24 17:42:06
这是标准的自定义错误。我写了自己的异常处理程序,它只是简单地向我发送服务器错误,然后继续允许应用程序执行内置重定向。我希望有一种方法可以编写一个属性,以编程方式禁用每个请求的自定义错误并将其附加到控制器。 – Josh 2011-01-24 17:50:10
是否要为特定控制器/操作或特定操作类型(ajax方法)禁用它? – frennky 2011-01-24 20:32:06