假设你的站点出现一堆让人看不懂的报错,那么你就不是一个合格的程序猿。也不是一个合格的站长。

以下的方面能够帮助你的站点远离让人头大的页面。

第一步:配置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>

第二步:建立错误页面

在站点根文件夹下建立404页面(找不到页面):404.html

403页面(server禁止訪问):403.html

这样就能够解决一部分问题,可是假设我们程序有些bug,碰巧被用户发现,那么还是会返回给用户一个不友好的报错页面。所以我们还要建立一个ErrorPages.aspx捕捉那些我们不知道的错误页面。用以处理那些报错,显示给用户良好的页面。

第三步:捕捉未知错误,显示友好提示信息。

在ErrorPages.aspx.cs中增加下面代码:

[c-sharp] view
plain
copy

  1. if (!IsPostBack)
  2. {
  3. HttpException erroy = new HttpException();
  4. string strCode = erroy.ErrorCode.ToString();
  5. string strMsg = erroy.Message;
  6. StringBuilder sb = new StringBuilder();
  7. sb.Append("-----------记录開始时间:" + System.DateTime.Now+"-----------------<br>");
  8. erroy.HelpLink = Request.QueryString["aspxerrorpath"];
  9. sb.Append("ErrorCode:" + strCode + "<br>");
  10. sb.Append("Message:" + strMsg + "<br>");
  11. sb.Append("HelpLink:" + erroy.HelpLink + "<br>");
  12. sb.Append("Source:" + erroy.Source + "<br>");
  13. sb.Append("TargetSite:" + erroy.TargetSite + "<br>");
  14. sb.Append("InnerException:" + erroy.InnerException + "<br>");
  15. sb.Append("StackTrace:" + erroy.StackTrace + "<br>");
  16. sb.Append("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "<br>");
  17. sb.Append("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "<br>");
  18. sb.Append("erroy.Data.ToString():" + erroy.Data.ToString() + "<br>");
  19. sb.Append("----------记录结束----------------");
  20. Response.Write(sb.ToString());
  21. }

到此为止:站点错误配置完毕。当然错误处理页面你能够任意定义,你能够把捕捉到的错误写入数据库或者文件,仅仅显示一些提示信息给用户。你也能够把错误信息处理后友好的显示给用户。

另一种方法是在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文件里加入例如以下代码:

[c-sharp] view
plain
copy

  1. protected void Application_Error(Object sender, EventArgs e)
  2. {
  3. System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/Web.config");
  4. System.Web.Configuration.CustomErrorsSection customErrors = (System.Web.Configuration.CustomErrorsSection)config.GetSection("system.web/customErrors");
  5. if (customErrors != null && (customErrors.Mode == System.Web.Configuration.CustomErrorsMode.On || customErrors.Mode == System.Web.Configuration.CustomErrorsMode.RemoteOnly))
  6. {
  7. System.Web.HttpApplication app = (HttpApplication)sender;
  8. System.Exception lastError = app.Server.GetLastError();
  9. System.Web.HttpException httpEx = (HttpException)lastError;
  10. if (httpEx != null)
  11. {
  12. int httpErrorCode = httpEx.GetHttpCode();
  13. string redirect = customErrors.DefaultRedirect;
  14. foreach (System.Web.Configuration.CustomError error in customErrors.Errors)
  15. {
  16. if (error.StatusCode == httpErrorCode) redirect = error.Redirect;
  17. }
  18. app.Server.ClearError();
  19. app.Context.Response.StatusCode = httpErrorCode;
  20. Server.Transfer(redirect);
  21. }
  22. }
  23. }

这样问题就得以攻克了。

.net三步配置错误页面,让你的站点远离不和谐的页面的更多相关文章

  1. 免申请直接用上 IDEA 新 UI,只需要这三步配置

    早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...

  2. mongodb安装和配置三步走

    最近在重新学习node,所以和同事一起搞了个模仿新浪微博的项目,项目刚开始,所以其他的东西就暂时先不提.这里介绍下mongodb的安装.直接搜索可以看到很多介绍,但是我第一次是失败了,不过看了好几个还 ...

  3. 轻松三步教你配置Oracle—windows环境

    最近笔者在学习Oracle的时候,虽然度过了大家所说的安装难题,但是又遇到了一系列的问题,经过多方求教才知道原来是自己仅仅是安装了Oracle,却没有在环境变量中进行相应的配置.笔者也像大家遇到问题时 ...

  4. iis7.5安装配置php环境详细清晰教程,三步实现【图文】

    iis7.5安装配置php环境详细清晰教程,三步实现[图文] iis7.5是安装在win7.win8里的web服务器,win2003.win2000的web服务器使用的是iis6.0,由于win7.w ...

  5. 简单三步同步你的 VSCode 用户配置

    https://www.cnblogs.com/knight-errant/p/10444777.html 设备重装,换设备,VSCode 又要重新配置了?不不不,简单三步,让你的 VSCode 配置 ...

  6. ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式

    由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...

  7. EBS中启用OAF页面个性化三个配置

    启用OAF页面个性化三个配置(Profiles) FND:诊断英文为FND: Diagnostics,用于设置是否显示“关于此页” 个性化自助定义英文为Personalize Self-Service ...

  8. HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...

  9. Hibernate实体映射配置(XML)简单三步完美配置

    我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...

随机推荐

  1. Flask web应用

    Flask web应用 一.介绍 最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构.下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python ...

  2. 基于visual Studio2013解决算法导论之029二叉搜索树

     题目 二叉搜索树 解决代码及点评 #include <stdio.h> #include <malloc.h> #include <stdlib.h> ty ...

  3. VC++在对话框中加入属性页

    当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置.本文针对这种方法来讨论几种可能实现的方案. 方案一本方案的例子请见源代码打包文件中的Property1部分 在对话 ...

  4. 关于初始化C++类成员

    在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass() { x=0; y=1; } 第二种方法: CSomeClass: ...

  5. 大整数乘法python3实现

    因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

  6. AES SHA-1 SM3 MD5

    AES是美国国家标准技术研究所NIST旨在代替DES的21世纪的加密标准. 输入:128bit 的消息分组 输出:128bit 的密文分组 密钥长度及圈数 128 10 192 12 256 14 消 ...

  7. BZOJ 4152: [AMPPZ2014]The Captain( 最短路 )

    先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra ---------------------------------------------- ...

  8. 五、Nginx多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. server_name的匹配顺序 Nginx中的s ...

  9. android开发中防止刚进入activity时edittext获取焦点,自动弹出软键盘

    刚进入activity的时候,如果布局组件有edittext的话,往往edittext会获取焦点,自动弹出软键盘,影响整个界面的视觉效果.解决方法如下:   可以在edittext的父布局结构中(例如 ...

  10. 黑龙江省第七届大学生程序设计竞赛-Mysterious Organization

    描述 GFW had intercepted billions of illegal links successfully. It has much more effect. Today, GFW i ...