Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的ExceptionFilter在部署站点时不获取异常?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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

C# 为什么我的ExceptionFilter在部署站点时不获取异常?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个MVC 4应用程序,并注册了一个异常过滤器: Global.asax.cs: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); // Here my filter gets registered FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRout

我有一个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());
    }
}
HandleUnhandleExceptionFilter.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;
    }
}
注意,我不使用webapi框架,但我使用MVC过滤器

发生异常时,我想显示文本
发生未知错误
。当我在本地执行站点时,这种方法可以很好地工作。当我发布站点时,将发布的文件复制到Web服务器并在我的机器(不是Web服务器)上浏览并获取一个电子选项,我没有看到文本
发生未知错误
。相反,我得到了一个错误页面的来源。所以我从字面上看:



如果您只想显示发生的
错误
,则可以尝试此操作

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


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

中提到的页面。我发现我的筛选器正在捕获异常,“真正”的问题是IIS 7。默认情况下,当Http状态码>400时,IIS 7使用自己的(自定义)错误页。所以在我的例子中,IIS7使用了它自己的错误页面。显然这不是我想要的

解决这一问题的两种方法是:

  • 设置
    Response.tryskipiiscustomerors=true。这将告诉IIS7不要使用自己的错误页面,而是使用
    ResponseText
  • system.webServer
    元素的
    web.config
    中添加以下行:

  • 有关此主题的更多信息,请参见

    谢谢,但我只对本文感兴趣。我不想重定向。我尝试将模式设置为
    RemoteOnly
    ,但没有效果。