如何在ASP.NET MVC中摆脱HTML错误报告?

6
我只需要纯文本的错误信息,但ASP.NET会在每个错误时输出一些HTML报告。
我有一个jQuery ajax调用,当出现错误时,所有这些垃圾都传送到客户端。
我创建了一个过滤器属性,但没有起到作用。
public class ClientErrorHandler : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        var responce = filterContext.RequestContext.HttpContext.Response;
        responce.Write(filterContext.Exception.Message);
        responce.ContentType = MediaTypeNames.Text.Plain;
        filterContext.ExceptionHandled = true;
    }
}

编辑

我看到了这个

我想看看filterContext.Exception.Message中的内容。


请提供客户端所见和您期望看到的内容。 - Dave Swersky
1
你的 web.config 文件中 CustomErrors="Off" 吗?尝试将 CustomErrors="On" 或 CustomErrors="RemoteOnly" 加入到你的 web.config 中,以避免出现 .NET 黄屏死亡错误(这是你看到的 HTML 代码)。 - Tommy
我将customerrors的值设置为On,但是没有任何改变。还是那个黄色的死亡屏幕。 - user137348
3个回答

2
我认为你无法正确处理异常的原因是它发生在MVC管道之外。如果你查看你发布的代码中的堆栈跟踪,就会发现没有涉及到System.Web.Mvc代码(当异常发生时,调用异常过滤器是从ControllerActionInvoker.InvokeAction中进行的)。
堆栈跟踪表明异常是在ASP.NET管道的后期(OnEndRequest)发生的,并且是通过Autofac组件传递的。
要捕获此错误,您需要订阅HttpApplication的Error事件。请参阅以下文章,了解如何创建全局错误处理程序:http://msdn.microsoft.com/en-us/library/994a1482.aspx。在此事件中,您可以处理错误并重定向到自定义错误页面。

0

你需要返回一个ContentResult

ContentResult result = new ContentResult();
result.Content = filterContext.Exception.Message;
result.ContentType = MediaTypeNames.Text.Plain; 
filterContext.Result = result;
filterContext.ExceptionHandled = true; 

是的,我已经逐步执行了它。该属性在方法上,而不是类上。 - user137348
也许你应该尝试逐步了解MVC源代码,看看为什么它对你无效。 - Sruly

0

根据您的错误细节,您正在使用JQuery和WCF,因此您可能想要查看这篇关于如何优雅地处理服务故障在jQuery和WCF之间的文章 - 如果可以的话,您可能需要重新设计您的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接