繁体   English   中英

为什么在部署站点时我的ExceptionFilter不能获取异常?

[英]Why is my ExceptionFilter not fetching exceptions when the site is deployed?

我有一个MVC 4应用程序,并且已经注册了一个异常过滤器:

的Global.asax.cs:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    // Here my filter gets registered
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

FilterConfig.cs:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleUnhandledExceptionFilter());
    }
}

HandleUnhandledExceptionFilter.cs:

public class HandleUnhandledExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.HttpContext.Response.StatusCode = 500;
        filterContext.HttpContext.Response.Write("An unknown error occured");
        filterContext.ExceptionHandled = true;
    }
}

注意,我使用WEB API框架,但使用MVC过滤器。

发生异常时,我想显示文本An unknown error occured 当我在本地执行站点时,此方法工作正常。 当我发布站点时,将已发布的文件复制到Web服务器并在我的计算机(不是Web服务器)上浏览并收到消息,我看不到An unknown error occured的文本。 相反,我得到了一个错误页面的来源。 所以我从字面上看到:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html .... etc.

首先,我认为这可能与customErrors ,因此我在我的webconfig中添加了一个customErrors标记:

<customErrors mode="Off"></customErrors>

但是不幸的是,这并没有解决问题。 所以我的问题是:显示我自己的错误消息该怎么办?

我发现我的过滤器正在捕获异常,而“真正的”问题是IIS7。默认情况下,当Http StatusCode> 400时,IIS 7使用它自己的(自定义)错误页面。因此,在我的情况下,IIS 7使用了它自己的错误。页。 显然,这不是我想要的。

解决此问题的两种方法是:

  1. 设置Response.TrySkipIisCustomErrors = true; 这将使IIS7不再使用它自己的错误页面,而是使用ResponseText
  2. system.webServer元素的web.config中,添加以下行: <httpErrors existingResponse="PassThrough"></httpErrors>

有关此主题的更多信息,请参见IIS7自定义错误模块的预期结果

如果您只想显示Error occurred则可以尝试此操作

 <customErrors mode="RemoteOnly" defaultRedirect="/YOURCONTROLLER/VIEW" />

上述代码将重定向到您在defaultredirect提到的页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM