MVC 实现自定义404错误页

直接进入正题。

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

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

对应的视图

@{
    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>

在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"};

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);
}

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

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

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

时间: 2024-10-20 01:59:49

MVC 实现自定义404错误页的相关文章

IIS自定义404错误页显示“系统找不到指定的文件”解决方法

在IIS站点属性里面设置了自定义的404错误页面为一个文件之后,有时一直不生效,总是提示这样一句话:“系统找不到指定的文件”. 其实这种错误也只是在某些网站程序中出现,其实解决办法很简单.这是由于IIS的普通用户没有访问指定的404.html页面的权限,造成了自定义的404错误页面无法显示,才显示“系统找不到指定的文件”.我们只要赋予指定的404.html页面给予USER用户组具有读的权限权限,就可以解决此问题. 就这么简单,事情就能轻松搞定. 在这里要提醒一下,有的人看到消息类型是“文件”设置

IIS7.0设置404错误页,返回500状态码

一般在II6下,设置自定义404错误页时,只需要在错误页中选择自定义的页面,做自己的404页面即可.但是在IIS7.0及以上时,设置完404错误页后,会发现状态码返回的是500,并且可能会引起页面乱码.查找资料,发现好多资料写的不够详细,不能完美解决问题.特将我的经验分享一下,希望能帮助到大家. 经过试验,发现有两种方案可用,各有利弊,我使用的是第二种方案. 方案1: 1. 在IIS中,找到对应站点,打开“功能视图”-“IIS栏”-“错误页”: 2. 双击“404”,打开“编辑自定义错误页”对话

asp.net mvc输出自定义404等错误页面,非302跳转。

朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters.Add(new HandleErrorAttribute()); 404错误目前想到的解决方法: 先上代码 Global.asax: 1 protected void Application_Error(object sender, EventArgs e) 2 { 3 var ex = Serv

IIS:IIS 8.5下设置404错误页

IIS版本:IIS 8.5 问题描述 搭建一个测试网站,总共就2个页面(index.php和404.php),默认首页为:index.php 当访问index.php和404.php的时候,IIS服务器能正常响应,说明在IIS 8.5中配置PHP环境没有出现问题. 访问index.php 访问404.php 另外,我的错误页配置结果如下: 正常情况下,当访问某个不存在的页面时(比如:127.0.0.1/aaa.php),此时,iis服务器发现aaa.php这个文件并不存在,所以,应该会请求404

网站设置404错误页的经历

设置404错误页的意义我就不说了.主要想记录一下这次设置错误页遇到的问题和解决方法. 第一版:本地测试能跳转到自定义的404页面,上线之后却没能跳转. 因为之前的项目有跳转404页面的例子,所以直接拷贝了一份到现在的项目,代码如下: HomeController public ActionResult Index() { Response.StatusCode = 404; Response.Charset = "utf-8"; return View("404")

在ASP.NET MVC3项目中,自定义404错误页面

在Web开发中,用户体验是至关重要的,一个友好的网站自然少不了自定义404错误页面. 让笔者为大家介绍404错误页面在ASP.NET MVC3项目中的配置: 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置        <customErrors mode="On" defaultRedirect="~/Index/Error404">          <error statusCode

asp.net mvc输出自定义404等错误页面,非302跳转

朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters.Add(new HandleErrorAttribute()); 404错误目前想到的解决方法: 先上代码 Global.asax: 1 protected void Application_Error(object sender, EventArgs e) 2 { 3 var ex = Serv

MVC异常过滤器 (错误页)

控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVC过滤器.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index(string id, string nam

nginx自定义404错误页面

在Nginx环境下配置自定义的404错误页面转向,避免给用户展示生硬.不友好的错误信息.可以给出如下提示:很抱歉,您访问的页面不存在或已被删除. 注意事项: 一.修改nginx.conf之前做好备份,避免出现问题. 二.定义页面时注意路径是否正确. ①首先创建一个404错误时显示的页面,如放在你的网站根目录下的404.html.(内容随便) ②在nginx.conf中的http区域加入fastcgi_intercept_errors on: http { ... fastcgi_intercep