自定义 404 与 500 错误页面,URL 地址不会重定向。

对于 404 与 500 错误发生时,我们希望自己定义一个更加人性化的页面。

例子

当访问下面这个地址时:

http://localhost/aaaa/bbb/ccc/ddd/eee/fff/ggg

浏览器的 URL 不变,依然是

http://localhost/aaaa/bbb/ccc/ddd/eee/fff/ggg

但页面显示的是我们自定义的错误页面。

一、在 web.config 里增加以下节点。

<system.webServer>
    <httpErrors errorMode="Custom">
      <!--跳转 404 页面-->
      <remove statusCode="404" subStatusCode=‘-1‘ />
      <error statusCode="404" path="/error/404" prefixLanguageFilePath="" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>

其中:

path="/error/404"

path 的值 “/error/404”是错误页面的 URL 地址,可以自己定义。

当发生 404 错误时就会跳转到该地址。

二、创建 404 错误的控制器。

namespace WebApplication1.Controllers
{
    using System.Web.Mvc;

    public class ErrorController : Controller
    {
        //
        // GET: /Error/
        public ActionResult Error404()
        {
            //这里使用的是“~/Views/Shared/Error.cshtml”页面。
            return View("Error");
        }
    }
}

增加路由规则:

namespace WebApplication1
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "error.404",
                "error/404",
                new { action = "Error404", controller = "Error" }
            );

            //routes.MapRoute(
            //    name: "Default",
            //    url: "{controller}/{action}/{id}",
            //    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            //);
        }
    }
}

二、创建一个专门用来处理异常的过滤器。

namespace WebApplication1.Filters
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;

    public class CustomHandleErrorAttribute : HandleErrorAttribute
    {
        /// <summary>
        /// 异常处理。
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.Exception != null)
            {
                //返回 500 错误。
                filterContext.Result = new ViewResult
                {
                    ViewName = View,
                    MasterName = Master,
                };

                filterContext.ExceptionHandled = true;
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 404;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
                return;
            }

            base.OnException(filterContext);
        }
    }
}

由于 ASP.NET MVC 已经定义了“HandleErrorAttribute”,只要继承并重写“OnException”方法就可以了。

在 Error.cshtml 页面加上:

Response.Status = "404 Not Found";

否则的话页面状态不正确。

完成,现在不管是 404 还是 500 错误,都会使用 “~/Views/Shared/Error.cshtml”页面。

下载地址:

http://files.cnblogs.com/files/cjnmy36723/404%E4%B8%8E500%E9%94%99%E8%AF%AF%E9%A1%B5%E9%9D%A2%E6%BC%94%E7%A4%BA.rar

时间: 2024-10-11 10:39:50

自定义 404 与 500 错误页面,URL 地址不会重定向。的相关文章

ASP.NET自定义404和500错误页面

在ASP.NET网站项目实际上线运行的过程中,有时候在运行环境下会出现400错误或者500错误,这些错误默认的页面都不友好,比较简单单调,其实我们可以自行设置这些错误所对应的页面,让这些错误跳转到我们指定的路径.此文将介绍如何在ASP.NET项目中设置404错误和500错误为例. 首先我们可以到网上下载到一些优美的404错误页面或者500错误页面的HTML模板,或者你也可以自行制作个HTML模板.然后将该页面放入到你的网站项目中,如果你的项目为WebForm项目,则你将需要新建一个Error.A

自定义 404 与 500 错误页面,URL 地址不会重定向(二)

上一篇是使用了全局过虑器来实现,还可以使用 HttpApplication 来处理. 参考文章: http://www.cnblogs.com/dudu/p/aspnet_custom_error.html 第一步和上一篇的第一步完全相同. 第二步开始是: 在 Global.asax  里的 MvcApplication 类里加上该方法: /// <summary> /// 应用程序出异常时必然会进这里,当出异常后,返回 404 错误页面. /// </summary> prote

SpringMVC 指定404、500错误页面

1.在web.xml中追加 <error-page> <error-code>404</error-code> <location>/404</location> </error-page> <error-page> <error-code>500</error-code> <location>/500</location> </error-page> *注意斜线

ASP.NET MVC 处理404与500错误页面的方法

第一步创建ErrorPageController 第二步添加Oops页面 @{ ViewBag.Title = "Oops"; Layout = "~/Areas/Admin/Views/Shared/MasterPage.cshtml"; } @section header{ <link rel="stylesheet" type="text/css" href="~/assets/admin/pages/c

Django自定义404、500等页面模板

在站点访问的过程中难免会因为不小心而访问到一些不存在的链接404或网站突然抽风导致服务器错误500,但django默认的错误页面则不怎么友好,所以我们需要自定义404.500等页面,提升用户体验 1. 首先先写好404.500等页面的html文件 2. 在站点app项目中的views.py文件中编写网页404.500等处理函数 def pageNotFound(request): ''' 404.500处理函数 ''' return render(request, '404.html') 3.

SpringBoot系列教程web篇之404、500异常页面配置

接着前面几篇web处理请求的博文,本文将说明,当出现异常的场景下,如404请求url不存在,,403无权,500服务器异常时,我们可以如何处理 原文友链: SpringBoot系列教程web篇之404.500异常页面配置 I. 环境搭建 首先得搭建一个web应用才有可能继续后续的测试,借助SpringBoot搭建一个web应用属于比较简单的活; 创建一个maven项目,pom文件如下 <parent> <groupId>org.springframework.boot</gr

若你的网站出现404、500错误该怎么办?

若问“草根站长”们最恨谁,一定是网站显示异常.小编今天网站显示400.500错误的原因及解决方法. 1.Asp网站打开显示404错误页面 原因 404错误说明所访问的页面不存在 解决方法 需要登陆服务器查看页面是否真的不存在,并根据实际情况告知客户完整上传文件:网站所在目录是否正确:环境配置不生效扔回提示404,这个时候需要上传环境测试探针测试. 同时404错误也是一件高概率事件,建议花时间去设计一个有创意的404页面,一方面告诉浏览者其请求的页面不存在,同时引导用户浏览其他页面而不是离开. 2

js/jquery获取当前页面URL地址并判断URL字符串中是否包含某个具体值

js/jquery获取当前页面URL地址并判断URL字符串中是否包含某个具体值本文介绍jquery/js获取当前页面url地址的方法,在jquery与js中获取当前页面url方法是一样的,因为jquery没有自己相关的函数,使用js 的windows方法来获取,相关方法如下: window.location.pathname //设置或获取对象指定的文件名或路径 window.location.href //设置或获取整个 URL 为字符串 window.location.port //设置或获

thinkphp 5.0如何实现自定义404(异常处理)页面

404页面是客户端在浏览网页时,由于服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面.404承载着用户体验与SEO优化的重任.404页面通常为用户访问了网站上不存在或已删除的页面,服务器返回的404错误.如果站长没有设置404页面,会出现死链接,蜘蛛爬行这类网址时,不利于搜索引擎收录,是网站必需的一个页面. 404错误信息通常是在目标页面被更改或移除,或客户端输入页面地址错误后显示的页面,如果直接展示404页面或者异常错误的话,对访问者来说用户体验是很不友好,所以我们需要自定