MVC 实现自定义404错误页

直接进入正题。

在HomeController中有一个NotFound的Action方法。

public ActionResult NotFound()
{
    return View();
}
View Code

对应的视图

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>出错了</title>
</head>
<body>
    <div style="text-align:center;font-size:1.5em"> 
        为什么受伤的总是我 o(╥﹏╥)o
    </div>
</body>
</html>
View Code

在Global.asax.cs中定义的Application_Error方法,在方法中获取错误并判断是否是静态资源的404错误,如果不是,则使用自定义的错误页显示

private readonly string[] staticFileExt = new string[] { ".axd", ".ashx", ".bmp", ".css", ".gif", ".htm", ".html", ".ico", ".jpeg", ".jpg", ".js", ".png", ".rar", ".zip",".woff",".ttf" ,".eot",".svg"};
View Code
protected void Application_Error()
{
    var error = Server.GetLastError() as HttpException;
    if (error!= null && error.GetHttpCode() == 404)
    {
        if (!IsStaticResource(Request))
        {
            Response.Clear();
            Server.ClearError();
            Response.TrySkipIisCustomErrors = true;

            IController controller = new HomeController();

            var routeData = new RouteData();
            routeData.Values.Add("controller", "Home");
            routeData.Values.Add("action", "NotFound");

            controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        }
    }
}

private bool IsStaticResource(HttpRequest request)
{
    string extension = VirtualPathUtility.GetExtension(request.Path);
    return staticFileExt.Contains(extension);
}
View Code

当前台访问存在的页面或资源时:

 

 

 

当访问不存在的非静态资源时,显示自定义错误页

 

 

当访问不存在的静态资源时:

 

 

转载于:https://www.cnblogs.com/godbell/p/7811979.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值