2010-08-26 20 views
6

我需要的只是纯文本的错误信息。但是ASP.NET正在从每个错误中做出一些HTML报告输出。如何摆脱ASP.NET MVC中的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; 
    } 
} 

编辑

我看到this

,我倒要看看究竟什么是这里filterContext.Exception.Message

+0

请包括您在客户端看到的内容以及您希望看到的内容。 – 2010-08-26 12:23:11

+0

好的,我编辑了我的帖子。 – user137348 2010-08-26 12:29:23

+1

您的web.config文件中的CustomErrors =“Off”?尝试在你的web.config中打开CustomErrors =“On”或CustomErrors =“RemoteOnly”来抑制死亡的.NET黄色屏幕(这是你看到的HTML代码)。 – Tommy 2010-08-26 14:45:59

回答

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; 
+0

没有,相同的结果.. – user137348 2010-08-26 12:34:32

+0

它适用于我。你确定过滤器正在被使用吗? – Sruly 2010-08-26 12:45:33

+0

是的,我通过它..属性是在方法上,而不是在课堂上。 – user137348 2010-08-26 12:50:58

0

由于您使用的是JQuery和WCF(通过您的错误的详细信息),您可能需要查看本文,了解如何优雅地处理服务故障between jQuery and WCF - 如果您有任何问题,您可能需要重新提供服务能够这样做。