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

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

第一步:配置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. mvc导航配置(View页面)

    @using Seyoit.Website.Config@using Seyoit.Website.Config.Navigation@{ var action = ViewContext.Route ...

  2. svn笔记2

    Examining History Your Subversion repository is like a time machine. It keeps a record of every chan ...

  3. Codeforces Round #312 (Div. 2)

    好吧,再一次被水题虐了. A. Lala Land and Apple Trees 敲码小技巧:故意添加两个苹果树(-1000000000, 0)和(1000000000, 0)(前者是位置,后者是价 ...

  4. POJ Octal Fractions(JAVA水过)

    题目链接:id=1131" target="_blank">CLICK HERE~ 尽管java一下模拟水过,可是我看到别人的一段奇妙代码,贴出和大家共享. imp ...

  5. Android进程内存上限

    Android应用程序都是在自己单独的进程中运行.Android为不同类型的进程分配了不同的内存使用上限,如果应用进程使用的内存超过了这个上限,则会抛出Out Of Memory异常,接着进程也被ki ...

  6. XML 的实体引用

    实体引用 在 XML 中,一些字符拥有特殊的意义. 如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始. 这样会产生 XML 错误: ...

  7. Sql 参数的使用

    代码片段: a)声明实例 1.声明SQLCommand实例. SqlCommand cmd = new SqlCommand(); 2.声明SqlDataAdapter实例. SqlDataAdapt ...

  8. ACM第二次比赛( C )

    Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description Vanya ...

  9. assert()用法

    assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[1] #include <assert.h>void assert( ...

  10. File 操纵目录

    mkdir()   创建目录 不可及联创建    即父路径中一旦有不存在文件夹  即创建失败 mkdirs() 创建目录,及联创建 list() 列出目录内所包含的文件名(string) listFi ...