.net三步配置错误页面,让你的站点远离不和谐的页面
假设你的站点出现一堆让人看不懂的报错,那么你就不是一个合格的程序猿。也不是一个合格的站长。
以下的方面能够帮助你的站点远离让人头大的页面。
第一步:配置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中增加下面代码:
- 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三步配置错误页面,让你的站点远离不和谐的页面的更多相关文章
- 免申请直接用上 IDEA 新 UI,只需要这三步配置
早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...
- mongodb安装和配置三步走
最近在重新学习node,所以和同事一起搞了个模仿新浪微博的项目,项目刚开始,所以其他的东西就暂时先不提.这里介绍下mongodb的安装.直接搜索可以看到很多介绍,但是我第一次是失败了,不过看了好几个还 ...
- 轻松三步教你配置Oracle—windows环境
最近笔者在学习Oracle的时候,虽然度过了大家所说的安装难题,但是又遇到了一系列的问题,经过多方求教才知道原来是自己仅仅是安装了Oracle,却没有在环境变量中进行相应的配置.笔者也像大家遇到问题时 ...
- iis7.5安装配置php环境详细清晰教程,三步实现【图文】
iis7.5安装配置php环境详细清晰教程,三步实现[图文] iis7.5是安装在win7.win8里的web服务器,win2003.win2000的web服务器使用的是iis6.0,由于win7.w ...
- 简单三步同步你的 VSCode 用户配置
https://www.cnblogs.com/knight-errant/p/10444777.html 设备重装,换设备,VSCode 又要重新配置了?不不不,简单三步,让你的 VSCode 配置 ...
- ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式
由于ASP.NET Core应用是一个同时处理多个请求的服务器应用,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止.出于安全方面的考量,为了避免敏感信息的外泄,客户端在默认的情况下并不会得 ...
- EBS中启用OAF页面个性化三个配置
启用OAF页面个性化三个配置(Profiles) FND:诊断英文为FND: Diagnostics,用于设置是否显示“关于此页” 个性化自助定义英文为Personalize Self-Service ...
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...
- Hibernate实体映射配置(XML)简单三步完美配置
我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了! 第一步:写注释 格式为:?属性,表达的是本对象与?的?关系. 例:“ ...
随机推荐
- mvc导航配置(View页面)
@using Seyoit.Website.Config@using Seyoit.Website.Config.Navigation@{ var action = ViewContext.Route ...
- svn笔记2
Examining History Your Subversion repository is like a time machine. It keeps a record of every chan ...
- Codeforces Round #312 (Div. 2)
好吧,再一次被水题虐了. A. Lala Land and Apple Trees 敲码小技巧:故意添加两个苹果树(-1000000000, 0)和(1000000000, 0)(前者是位置,后者是价 ...
- POJ Octal Fractions(JAVA水过)
题目链接:id=1131" target="_blank">CLICK HERE~ 尽管java一下模拟水过,可是我看到别人的一段奇妙代码,贴出和大家共享. imp ...
- Android进程内存上限
Android应用程序都是在自己单独的进程中运行.Android为不同类型的进程分配了不同的内存使用上限,如果应用进程使用的内存超过了这个上限,则会抛出Out Of Memory异常,接着进程也被ki ...
- XML 的实体引用
实体引用 在 XML 中,一些字符拥有特殊的意义. 如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始. 这样会产生 XML 错误: ...
- Sql 参数的使用
代码片段: a)声明实例 1.声明SQLCommand实例. SqlCommand cmd = new SqlCommand(); 2.声明SqlDataAdapter实例. SqlDataAdapt ...
- ACM第二次比赛( C )
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Vanya ...
- assert()用法
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:[1] #include <assert.h>void assert( ...
- File 操纵目录
mkdir() 创建目录 不可及联创建 即父路径中一旦有不存在文件夹 即创建失败 mkdirs() 创建目录,及联创建 list() 列出目录内所包含的文件名(string) listFi ...