我的应用中启用了自定义错误。 Web配置有如下条目:
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml">
<error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml"/>
<error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml"/>
</customErrors>
我还将HandleError
属性应用为全局操作过滤器。我的FilterConfig
内容如下:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
此外,Error.cshtml
文件夹中定义了默认~/Views/Shared
。
然而,我的应用程序显示了IE的丑陋的默认错误页面。
更新
我检查过自定义错误页面在IE以外的所有其他浏览器中都显示正常。这是什么交易?
进一步更新
刚刚发现这篇文章。 http://perishablepress.com/important-note-for-your-custom-error-pages/
它说IE希望自定义错误页面的大小至少为512字节。如果您的自定义错误页面小于该大小,它将会抛出自己的丑陋错误页面。
最新更新 现在一切正常,我增加了错误页面的有效负载。但是,只有默认的Error.cshtml页面会显示未处理的异常。对于其他状态代码,我得到一个ASP.NET 404,说它无法在我在web.config文件中指定的位置找到我的自定义错误页面。我有自定义错误页面,它们具有我在web.config中指定的确切名称。
答案 0 :(得分:1)
您需要通过控制器和操作提供路径,而不是设置(* .cshtml)剃刀文件的路径。
以下是我如何按预期工作的
<customErrors mode="Off" defaultRedirect="/home/error">
<error statusCode="404" redirect="/home/notfound" />
</customErrors>
在我的Home Controller中,我有一个名为Error的动作,另一个叫做NotFound
[AllowAnonymous]
public class HomeController : Controller
{
public ActionResult Error()
{
var qs = HttpUtility.ParseQueryString(Request.Url.Query);
var errorPath = qs["aspxerrorpath"];
return View(model: errorPath);
}
public ActionResult NotFound()
{
return View();
}
...
}