C# 为什么我的ExceptionFilter在部署站点时不获取异常?
我有一个MVC 4应用程序,并注册了一个异常过滤器: Global.asax.cs: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
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
,但没有效果。