如果你的网站出现一堆让人看不懂的报错,那么你就不是一个合格的程序员,也不是一个合格的站长。
下面的方面可以帮助你的网站远离让人头大的页面。
第一步:配置web.config
打开web.config,在节点下添加如下代码:
立即学习“前端免费学习笔记(深入)”;
第二步:建立错误页面
在网站根目录下建立404页面(找不到页面):404.html
403页面(服务器禁止访问):403.html
这样就可以解决一部分问题,但是如果我们程序有些bug,碰巧被用户发现,那么还是会返回给用户一个不友好的报错页面。所以我们还要建立一个ErrorPages.aspx捕捉那些我们不知道的错误页面,用以处理那些报错,显示给用户良好的页面。
第三步:捕捉未知错误,显示友好提示信息。
在ErrorPages.aspx.cs中加入以下代码:
[c-sharp] view plain copy
if (!IsPostBack) { HttpException erroy = new HttpException(); string strCode = erroy.ErrorCode.ToString(); string strMsg = erroy.Message; StringBuilder sb = new StringBuilder(); sb.Append(“———–记录开始时间:” + System.DateTime.Now+”—————–
“); erroy.HelpLink = Request.QueryString[“aspxerrorpath”]; sb.Append(“ErrorCode:” + strCode + “
“); sb.Append(“Message:” + strMsg + “
“); sb.Append(“HelpLink:” + erroy.HelpLink + “
“); sb.Append(“Source:” + erroy.Source + “
“); sb.Append(“TargetSite:” + erroy.TargetSite + “
“); sb.Append(“InnerException:” + erroy.InnerException + “
“); sb.Append(“StackTrace:” + erroy.StackTrace + “
“); sb.Append(“GetHtmlErrorMessage:” + erroy.GetHtmlErrorMessage() + “
“); sb.Append(“erroy.GetHttpCode().ToString():” + erroy.GetHttpCode().ToString() + “
“); sb.Append(“erroy.Data.ToString():” + erroy.Data.ToString() + “
“); 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() + “”;
err += “异常信息:” + erroy.Message + “”;
err += “Source:” + erroy.Source + “”;
err += “StackTrace:” + erroy.StackTrace + “”;
//清除前一个异常
//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
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); } } }
这样问题就得以解决了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3091992.html