.net配置404错误页面
如果你的网站出现一堆让人看不懂的报错,那么你就不是一个合格的程序员,也不是一个合格的站长。
下面的方面可以帮助你的网站远离让人头大的页面。
第一步:配置web.config
打开web.config,在<system.web>节点下添加如下代码:
<customErrors mode="On" defaultRedirect="ErrorPages.aspx">
<error statusCode="403" redirect="403.html" />
<error statusCode="404" redirect="404.html" />
</customErrors>
或者可是用以下方法配置:
1.进入web.config 找到httpErrors 按照下面设置
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="404" />
<error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
2.找到 system.web 节点,在 customErrors 节点中添加 mode 为 on
(注:我们网站是在config/CustomErrors.config 这里把model值改为On 就行了)
<?xml version="1.0" encoding="utf-8"?>
<customErrors mode="On" defaultRedirect="404.aspx">
<error statusCode="404" redirect="404.aspx" />
<error statusCode="403" redirect="404.aspx" />
<error statusCode="500" redirect="404.aspx" />
</customErrors>
第二步:建立错误页面
在网站根目录下建立404页面(找不到页面):404.html
403页面(服务器禁止访问):403.html
这样就可以解决一部分问题,但是如果我们程序有些bug,碰巧被用户发现,那么还是会返回给用户一个不友好的报错页面。所以我们还要建立一个ErrorPages.aspx捕捉那些我们不知道的错误页面,用以处理那些报错,显示给用户良好的页面。
第三步:捕捉未知错误,显示友好提示信息。
在ErrorPages.aspx.cs中加入以下代码:
if (!IsPostBack)
{
HttpException erroy = new HttpException();
string strCode = erroy.ErrorCode.ToString();
string strMsg = erroy.Message;
StringBuilder sb = new StringBuilder(); sb.Append("-----------记录开始时间:" + System.DateTime.Now+"-----------------<br>");
erroy.HelpLink = Request.QueryString["aspxerrorpath"];
sb.Append("ErrorCode:" + strCode + "<br>");
sb.Append("Message:" + strMsg + "<br>");
sb.Append("HelpLink:" + erroy.HelpLink + "<br>");
sb.Append("Source:" + erroy.Source + "<br>");
sb.Append("TargetSite:" + erroy.TargetSite + "<br>");
sb.Append("InnerException:" + erroy.InnerException + "<br>");
sb.Append("StackTrace:" + erroy.StackTrace + "<br>");
sb.Append("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "<br>");
sb.Append("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "<br>");
sb.Append("erroy.Data.ToString():" + erroy.Data.ToString() + "<br>");
sb.Append("----------记录结束----------------"); Response.Write(sb.ToString());
}
到此为止:网站错误配置完成。当然错误处理页面你可以随意定义,你可以把捕捉到的错误写入数据库或者文件,只显示一些提示信息给用户,你也可以把错误信息处理后友好的显示给用户。
还有一种方法是在Global.asax中的void Application_Error(object sender, EventArgs e)方法中定义;现给以大体方法,具体操作可以根据实际情况给以修改。
在Global.asax文件中修改:
void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码
Exception erroy = Server.GetLastError();
string err = "出错页面是:" + Request.Url.ToString() + "</br>";
err += "异常信息:" + erroy.Message + "</br>";
err += "Source:" + erroy.Source + "</br>";
err += "StackTrace:" + erroy.StackTrace + "</br>";
//清除前一个异常
//Server.ClearError();
//此处理用Session["ProError"]出错。所以用 Application["ProError"]
Application["erroy"] = err;
//此处不是page中,不能用Response.Redirect("../ErrorPages.aspx");
System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ErrorPages.aspx");
}
在ErrorPages.aspx.cs文件中修改
protected void Page_Load(object sender, EventArgs e)
{
//显示程序中的错误码
if (!IsPostBack)
{
//显示程序中的错误码
if (Application["erroy"] != null)
{
Response.Write(Application["erroy"].ToString());
}
}
}
补充:使用上述方法实现的跳转,返回的HTTP状态码全部是302,本来应该返回404的也给返回302.这样对搜索引擎优化很不利。所以我们应该在Global.asax文件中添加如下代码:
protected void Application_Error(Object sender, EventArgs e)
{
System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/Web.config");
System.Web.Configuration.CustomErrorsSection customErrors = (System.Web.Configuration.CustomErrorsSection)config.GetSection("system.web/customErrors");
if (customErrors != null && (customErrors.Mode == System.Web.Configuration.CustomErrorsMode.On || customErrors.Mode == System.Web.Configuration.CustomErrorsMode.RemoteOnly))
{
System.Web.HttpApplication app = (HttpApplication)sender;
System.Exception lastError = app.Server.GetLastError();
System.Web.HttpException httpEx = (HttpException)lastError;
if (httpEx != null)
{
int httpErrorCode = httpEx.GetHttpCode();
string redirect = customErrors.DefaultRedirect;
foreach (System.Web.Configuration.CustomError error in customErrors.Errors)
{
if (error.StatusCode == httpErrorCode) redirect = error.Redirect;
}
app.Server.ClearError();
app.Context.Response.StatusCode = httpErrorCode;
Server.Transfer(redirect);
}
}
}
.net配置404错误页面的更多相关文章
- nginx下配置404错误页面
1.创建自己的404.html页面,并放于网站根目录. 2.更改nginx.conf在http定义区域加入: fastcgi_intercept_errors on; 3.更改nginx.conf(或 ...
- NGINX 配置404错误页面转向
什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...
- NGINX下配置404错误页面的方法分享
NGINX下配置自定义的404页面是可行的,而且很简单,只需如下几步,需要的朋友可以参考下 1. 创建自己的404.html页面 2.更改nginx.conf在http定义区域加入: fastcg ...
- NGINX 配置404错误页面转向
什么是404页面 如果碰巧网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是 ...
- nginx中配置404错误页面的教程
什么是404页面如果网站出了问题,或者用户试图访问一个并不存在的页面时,此时服务器会返回代码为404的错误信息,此时对应页面就是404页面.404页面的默认内容和具体的服务器有关.如果后台用的是NGI ...
- iis7+php5.6配置404错误页面的问题
打开错误页,如图1 图1 1.刚开始选择的是“在此网站上执行URL”,/404.html页面可以显示出来,但返回的状态是200,对seo不友好,这样生成的的web.config配置文件如下: < ...
- Ubuntu nginx 配置404错误页面
1.创建自己的404.html页面: 2.更改nginx.conf在http定义区域加入: /etc/nginx# vim nginx.conf 下添加 fastcgi_intercept_error ...
- Nginx配置error_page 404错误页面
问题由来 昨天一网友在segmentfault.com上提问,无法做404重定向 打开对方的网站随便输入一个错误的地址发现给出了404代码,但是页面完全空白,并没有显示404页面的设定内容 当时就明白 ...
- java web 404错误页面配置
java web 404错误页面配置:注意红框的地方,在工程的web.xml文件里的最开头加入如下的内容便可,但是也有问题,针对以.action后缀名和.jsp后缀名不起作用, 因为后面配置了一些拦截 ...
随机推荐
- Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛
1.I/O, ASDO 在AS 模式下是专用输出脚,在PS 和JTAG 模式下可以当I/O 脚来用.在AS 模式下,这个脚是CII 向串行配置芯片发送控制信号的脚.也是用来从配置芯片中读配置数据的脚 ...
- jQuery-替换和删除元素
1.replaceWith方法 用提供的内容替换集合中所有匹配的元素并且返回被替换元素的集合 参数类型说明: 1)普通字符串(可包含各种html标签) 2)jQuery对象 ①使用$函数创建的新元素( ...
- UIView的背景渐变
//绘制背景渐变 /* CGCradientCreateWithColorComponents函数需要四个参数: 色彩空间:(Color Space)这是一个色彩范围的容器,类型必须是CGColorS ...
- 实操演练!MathType几个绝妙小技巧!
在论文中编写公式时MathType绝对是很多人不二的选择,它的功能比较完善,操作比较方便,包含的符号模板很多,易学易上手,这些都是它的优点.但是在使用MathType时,还有很多绝妙的小技巧,使用起来 ...
- Java精选笔记_集合【Map(映射)接口】
Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...
- Effective C++ Item 34 Differentiate between inheritance of interface and inheritance of implementation
1. 成员函数的接口总是被继承. 如 Item32 所说, public 意味着 is-a, 所以对 base class 为真的任何事情对 derived class 也为真 2. 声明一个 pur ...
- Ext3.4--TreeGridDemo
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CategoryProper ...
- Python 爬虫知识点
一.基础知识 1.HTML分析 2.urllib爬取 导入urilib包(Python3.5.2) 3.urllib保存网页 import urllib.requesturl = "http ...
- Thinkphp 修改U方法按路由规则生成url
tp开户路由后,使用U方法是不会按路由规则生成url的,一般我们是要手动修改模版,把里面的U方法去掉,手动修改链接,如果是已经写好的程序,后期才添加路由,修改起链接就太麻烦了 今天无聊就修改了一下U方 ...
- set集合操作【python】
set集合操作包括: >>> x=set("123defj89") >>> y=set("ab34e6jh9") >& ...