web项目中处理404错误
我们开发web项目的时候,经常遇到由于数据库中数据不存在或者被删除,而带来相应的web页面不存在/出错的情况。那么我们应该如何对待这种情况呢?
通常情况下,类似代码:Product pro = GetProduct(123);返回编号为123的产品信息,如果后面不判断pro==null直接引用pro的属性,就会引发 NullReferenceException(为将对象引用到对象实例)异常,然后如果web.config中设置
<customErrors mode="RemoteOnly" defaultRedirect="err.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
会转到默认页,但是跳转到err.aspx是返回的302状态码。实际上因为产品已经不存在了,这里需要返回404状态码,返回404状态码不仅是 给用户看,给用户看什么状态码没关系,但是搜索引擎会看到这个状态码,如果有大量产品不存在,那就会导致搜索引擎以前收录的产品资料一直存在,每次搜索引 擎来更新网站,都找不到实际内容,会降低搜索引擎对网站的信任感。下面看我的做法:
网站根目录建立404.aspx,后台代码如下:
protectedvoid Page_Load(object sender, EventArgs e)
{
Response.StatusCode =404;
}
{
Response.StatusCode =404;
}
前台代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="404.aspx.cs" Inherits="Web._04"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>您访问的页面不存在</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>您访问的页面不存在(三秒后将自动跳转到<a href="http://www.svnhost.cn">网站首页</a>)</h1>
<script language="javascript">
function go()
{
window.location ="http://www.svnhost.cn";
}
setTimeout (go,3000);
</script>
</div>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>您访问的页面不存在</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>您访问的页面不存在(三秒后将自动跳转到<a href="http://www.svnhost.cn">网站首页</a>)</h1>
<script language="javascript">
function go()
{
window.location ="http://www.svnhost.cn";
}
setTimeout (go,3000);
</script>
</div>
</form>
</body>
</html>
这里就做好一个404页面了。
接下来就是调用这个页面:
Product pro = GetProduct(123);
if (pro == null)Server.Transfer("/404.aspx");
这样删除一个产品以后,搜索引擎再来爬取这个页面,发现返回404状态码,就会删除这个索引了。
如果网站存在类似问题,可以在Google网站管理员工具里查看到。