正 文

从ASP.NET中发送电邮通知


www.7dspace.com  更新日期:2005-11-27 3:50:12  七度空间


实际使用SmtpMail:404错误通知

网站所有者要尽量保证不会因为自己的原因而造成404 Page Not Found错误,比如用户将某个页加入收藏夹之后,却因为你移动了网页而造成他们找不到原来的页面。我认为这是一种很严重的错误,希望尽快知道它们,而不必每次都阅览服务器日志来查找错误。知道得越早,修正得越快。

当然,并不是所有404错误都是由自己造成的;也可能是用户敲错了URL,或者是他们有意猜测某个网址。但通过这种404错误,我们可知道用户的操作习惯,以及他们的一些希望,所以仍有必要对其进行跟踪。

404Handler.aspx页

我写了一个示范404Handler.aspx页(参见清单A),它能在载入时发送一个电邮通知,其中包括有误的URL。首先,我检查客户端浏览器的用户代理;如果是因为某个spider或者crawler在闲逛而引起404错误,就不必发送电邮通知。所以,我在Request.UserAgen返回的字符串中查找是否出现spider或crawler字样。如果是,就认为是一个spider在捣鬼,函数退出,不发送电子邮件。

如果代理不是spider/crawler,就将整个Request.RawUrl字符串包括到邮件正文中,并从一个虚拟电邮地址(404@mysite.com)向admin@mysite.com发送一封电子邮件。另外还要包括Request.UrlReferrer,以便了解有误的链接是否来源于我的网站中的另一个网页。

捕捉错误

至于具体如何捕捉404错误,要取决于你对Web服务器的控制有多大。如果能完全访问Web服务器,就可使用Internet服务器管理器来查看网站属性,并更改“自定义错误页”选项,指向负责生成警告的.aspx页。

另一方面,如果你的网站是托管的,那么也许能访问一个HTML文档(通常名为404.htm)。请对其进行自定义,防止访问者看到标准的、难看的404错误页。在这个例子中,请在其中添加一些客户端JavaScript代码,如清单B所示。

代码会重定向到404Handler.aspx页,并将原来请求的URL和引用URL作为查询字符串的一部分。之所以要把它们作为重定向URL的一部分,是因为现在的Request.UrlReferrer将变成404.htm,而这是没有多大用处的。由于404Handler.aspx将它的整个URL都放到电邮通知中,所以我检查一下查询字符串,就能知道原来的引用URL是什么。

相对路径的问题

如果将404错误直接发送给404Handler.aspx文件,注意虚拟路径将是在有误的URL中请求的路径。在.aspx页的HTML部分中,这很容易破坏对样式表和图像等元素的相对引用。最终的404页可能散布着难看的、中断的图像占位符。

所以,更好的做法(虽然较慢,而且不直观)是像清单B的客户端JavaScript例子那样使用一种重定向技术。通过客户端代码来重定向浏览器(如下所示),能彻底避免相对路径的问题。

document.location.replace(“/404handler.aspx”);

本文介绍的并不是跟踪和提示404错误的最高级的技术,但它足够快、足够简单,让你能在第一时间修正错误。当然,SmtpMail并非只能用于处理404错误;在其他许多情况下,你和你的管理员都需要尽快获得电邮通知。由于只需一、两行代码就可实现,所以极大简化了你的编程工作。

2页,页码:[1] [2] 

上一篇:简介用ADO.NET DataSet访问数据
下一篇:ASP.NET缓存策略经验谈
作者:周靖 译  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐