【问题标题】:How to get rid of that HTML error report in ASP.NET MVC?如何摆脱 ASP.NET MVC 中的 HTML 错误报告?
【发布时间】:2011-04-04 05:59:00
【问题描述】:

我需要的只是纯文本的错误消息。但是 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;
    }
}

编辑

我看到this

我想看看这里有什么filterContext.Exception.Message

【问题讨论】:

  • 请包括您在客户端看到的内容以及您希望看到的内容。
  • Web.config 中有 CustomErrors="Off" 吗?尝试在 web.config 中打开 CustomErrors="On" 或 CustomErrors="RemoteOnly" 以抑制 .NET 黄屏死机(这是您看到的 HTML 代码)。
  • 我将 customerrors 值设置为 On,但什么也没有。还是一样的黄屏死机。

标签: asp.net-mvc error-handling


【解决方案1】:

在我看来,您无法正确处理异常的原因是因为它发生在 MVC 管道之外。如果您查看您发布的代码中的堆栈跟踪,则没有对 System.Web.Mvc 代码的引用(发生异常时触发异常过滤器是从 ControllerActionInvoker.InvokeAction 调用的)。

堆栈跟踪表明异常发生在 ASP.NET 管道 (OnEndRequest) 的后期,并且它来自 Autofac 组件。

要捕获此错误,您必须订阅 HttpApplication 的 Error 事件。请参阅以下有关创建全局错误处理程序的文章:http://msdn.microsoft.com/en-us/library/994a1482.aspx。在这种情况下,您可以处理错误并重定向到自定义错误页面。

【讨论】:

    【解决方案2】:

    你需要返回一个 ContentResult

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

    【讨论】:

    • 是的,我逐步完成了。属性在方法上,而不是在类上。
    • 也许您应该尝试单步调试 mvc 源代码,看看它为什么不适合您。
    【解决方案3】:

    由于您使用的是 JQuery 和 WCF(根据您的错误的详细信息),您可能想看看这篇文章,了解如何优雅地处理服务故障between jQuery and WCF - 如果您遇到这种情况,您可能需要重新处理您的服务可以这样做。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多