我有一个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
。我在本地执行网站时工作正常。当我发布网站时,将发布的文件复制到网络服务器并浏览我的机器(不是网络服务器)并获得一个结果,我看不到文本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>
但不幸的是,这并没有成功。所以我的问题是:我需要做些什么才能显示自己的错误消息?
答案 0 :(得分:2)
我发现我的过滤器正在捕捉异常并且真正的&#39;问题是IIS 7.默认情况下,当Http StatusCode&gt;时,IIS 7使用它自己的(自定义)错误页面。因此,在我的情况下,IIS 7使用了它自己的错误页面。显然这不是我想要的。
解决此问题的两种方法是:
Response.TrySkipIisCustomErrors = true;
。这将使IIS7不使用它自己的错误页面,而是使用ResponseText
。web.config
元素的system.webServer
中添加以下行:<httpErrors existingResponse="PassThrough"></httpErrors>
。有关此主题的更多信息,请参阅What to expect from IIS7 custom error module
答案 1 :(得分:0)
如果您只是想显示Error occurred
,那么您可以试试这个
<customErrors mode="RemoteOnly" defaultRedirect="/YOURCONTROLLER/VIEW" />
上面的代码会重定向到您在defaultredirect