对于 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 = ;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
return;
} base.OnException(filterContext);
}
}
}

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

在 Error.cshtml 页面加上:

Response.Status = "404 Not Found";

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

三、将 CustomHandleErrorAttribute 注册成全局过虑器。

    public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomHandleErrorAttribute());
}
}

完成,现在不管是 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

自定义 404 与 500 错误页面,URL 地址不会重定向(一)的更多相关文章

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

    上一篇是使用了全局过虑器来实现,还可以使用 HttpApplication 来处理. 参考文章: http://www.cnblogs.com/dudu/p/aspnet_custom_error.h ...

  2. Nginx 自定义404、500错误页面跳转

    自定义Nginx错误界面跳转 1.开启Nginx.conf配置文件下的自定义接口参数. http { fastcgi_intercept_errors on; } 2.在Server区域添加自定义的错 ...

  3. 【转载】ASP.NET自定义404和500错误页面

    在ASP.NET网站项目实际上线运行的过程中,有时候在运行环境下会出现400错误或者500错误,这些错误默认的页面都不友好,比较简单单调,其实我们可以自行设置这些错误所对应的页面,让这些错误跳转到我们 ...

  4. SpringMVC 指定404、500错误页面

    1.在web.xml中追加 <error-page> <error-code>404</error-code> <location>/404</l ...

  5. asp.net core 自定义404等友好错误页面

    Home控制器里: [Route("Home/Error/{statusCode}")] public IActionResult Error(int statusCode) { ...

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

    第一步创建ErrorPageController 第二步添加Oops页面 @{ ViewBag.Title = "Oops"; Layout = "~/Areas/Adm ...

  7. apache 网页301重定向、自定义400/403/404/500错误页面

    首先简单介绍一下,.htaccess文件是Apache服务器中的一个配置文件(Nginx服务器没有),它负责相关目录下的网页配置.通过对.htaccess文件进行设置,可以帮我们实现:网页301重定向 ...

  8. SpringBoot自定义错误页面,SpringBoot 404、500错误提示页面

    SpringBoot自定义错误页面,SpringBoot 404.500错误提示页面 SpringBoot 4xx.html.5xx.html错误提示页面 ====================== ...

  9. 404 Not Found错误页面的解决方法和注意事项

    最近这段时间一直忙于整理网站的错误页面,期间整理了很多关于404 Not Found错误页面的知识,加之最近也在帮团队新来的人员培训seo优化知识,所以在此借助马海祥博客的平台就拿出来跟大家一起分享一 ...

随机推荐

  1. oracle学习 一 (持续更新中)

    首先你需要创建一个表空间,然后,再创建一个用户名,用户名要给他指定一个表空间,并且给这个用户赋予权限, DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构. RESOURCE:拥有 ...

  2. Android打开WIFI或者移动网络的代码实现

    MainActivity如下: package wy.testnetwork; import java.lang.reflect.Field; import java.lang.reflect.Inv ...

  3. joj 2453 candy 网络流建图的题

    Problem D: Candy As a teacher of a kindergarten, you have many things to do during a day, one of whi ...

  4. POJ1014Dividing(DP)

    http://poj.org/problem?id=1014 最简单之多重背包 #include <map> #include <set> #include <stack ...

  5. css div 垂直居中

    参考:http://css-tricks.com/centering-in-the-unknown/ <style> .valign { font-size: 0px;/* clear s ...

  6. A Dream

    A Dream 2013年10月20日,成都,天气阴,铜牌16.离2012年10月14日长春现场赛刚好隔了一年,刚看了下去年写的总结http://blog.csdn.net/cc_again/arti ...

  7. android ViewConfiguration

    ViewConfiguration 1.有时候要获取一些android UI的中一些默认参数的来进行操作设置,就要用到ViewConfiguration 官方飞解释是:ViewConfiguratio ...

  8. WSO2 ESB

    什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线.WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,日志记录,任务调度,负载平衡,失败了路由 ...

  9. Libvirt 虚拟化库剖析

    讲到向外扩展计算(比如云计算),libvirt 可能是您从未听说过的最重要的库之一.libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的来宾操作系统.libvirt 本身不 ...

  10. WinForm设置窗体默认控件焦点

    winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文本框里了. ②Winfor ...