更新:这里是完整的错误处理解决方案
我有一个普通的MVC4 Web项目。什么都没添加,也没有删除,只是在Visual Studio中创建了一个新项目。
在web.config
中,我添加了自定义错误页面处理程序:
<customErrors mode="On" defaultRedirect="~/Content/Error.htm" redirectMode="ResponseRewrite" />
而 ~/Content/Error.htm
文件是:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>OOPS! Error Occurred. Sorry about this.</title>
</head>
<body>
<h2>OOPS! Error Occurred</h2>
</body>
</html>
每当我在网站上遇到404错误时,在Firefox和Chrome中,Error.htm以纯文本形式提供:
有没有一种方法可以强制IIS服务器错误页面带有content-type
头?
附言:实际问题出现在一个复杂的MVC4项目中,它在Global.asax中拥有自己的错误处理方式。但我发现一些错误不通过ASP管道处理,只由IIS处理。比如url末尾的点。使用< httpErrors />解决方案确实提供了正确的响应,但是我们在Global.asax中定制的错误处理方式,即Application_Error()这种方式无法被调用。
更新 看来我无法赢得这场斗争。 IE显示HTML正确呈现,Firefox和Chrome则显示为纯文本。当我切换到纯文本时,Firefox和IE会正确显示空格,而IE会忽略空格并尝试呈现HTML。如果我试图将图像作为错误页面服务,Firefox和Chrome会显示图像,而IE会显示此内容:Facepalm!
protected void Application_Error(object sender, EventArgs e) { HttpContext.Current.Response.ContentType = "text/html; charset=UTF-8"; }
- Guillaume Roy