65.9K
CodeProject 正在变化。 阅读更多。
Home

基本页面类网站开发

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.80/5 (9投票s)

2006年3月21日

CPOL

3分钟阅读

viewsIcon

62649

downloadIcon

406

本文介绍了在开发 .NET 网站时使用的基本基页类。

引言

本文讨论了一个基本的 BasePage 类,该类用作 .NET 2.0+ 网站的“基页”的起点。 顺便说一句,如果需要,这个基页类可以经过最少的工作量,追溯到 .NET 1.0+。 我最初是使用 Visual Studio 2005 创建它的,因此原样保留了代码。

基页类

现在进入基本的细节。 我构建了这个 BasePage,作为我开始开发的任何网站的起点。 每个人对这个页面类中应该包含什么都会有自己的哲学差异,但我只选择了那些真正符合我开始项目时需要的功能。 随着需求的出现,我可能会添加更多的安全处理功能或特定于地区的代码。

基页类在生活中具有两个目的

  1. 处理页面请求期间发生的意外错误。
  2. 用于获取请求参数值和删除浏览器 Cookie 的包装函数。

意外错误

开发完成后,当用户开始涌向您的网站时,他们略有可能会遇到意外错误(或异常)。 当一个用户(或许多用户)遇到错误时,您可能永远失去了那个人,或者更糟的是,他们可能会告诉他们的所有朋友,这个网站就是不好用。 使用 BasePage 类,您可以拥有一个通用的错误处理例程来记录此异常(堆栈跟踪和其他任何需要的内容),和/或通过电子邮件通知您有关错误的信息。

我在全局错误处理中常用的一些常见做法

  1. 记录 ASPX 页面(和日期时间)。
  2. 记录异常消息。
  3. 记录堆栈跟踪。
  4. 记录请求对象(查询字符串、表单、Cookie、会话:值)。 通过存储请求对象信息,我可以了解用户在页面崩溃时正在做什么,而无需与用户通信以找出发生了什么。
  5. 如果使用表单(或集成 Windows)身份验证,请存储用户的姓名,以便我可以通知他/她我正在努力解决问题。 然后,在找到解决方案并投入生产后通知他/她。
  6. 如果可能,将项目 1-4(或 5)记录到中央错误存储库中,以便对其进行跟踪和状态。

您可以对记录异常执行更多或更少的操作。 如果您做得更多,请告诉我除了上面列出的内容之外您还做了什么,以便我改进我的错误处理。

URL 参数值的包装函数

基页类包含几个方便的包装函数,用于从请求对象中获取信息。 例如,已向以下页面发出了请求

mypage.aspx?op=add&left_op=1&right_op=2

要获取“left_op”和“right_op”的整数值,我们可以编写以下代码

int left_op = Convert.ToInt32(Request.QueryString["left_op"];
int right_op = Convert.ToInt32(Request.QueryString["right_op"];

如果恶意用户从查询字符串中删除“right_op”值,则这很容易出错。 通过使用包装函数获取查询字符串值,我们简化了代码,并为缺少的查询字符串参数提供了一些默认值

int left_op = GetParmInt("left_op", 0);
int right_op = GetParmInt("right_op", 0);

在这一点上,每个人都会对应该如何处理缺失或恶意的查询字符串参数值有自己的看法。 虽然此演示不适合每个项目,但用于获取信息的包装函数可以满足我 90% 以上的需求。

“获取参数”包装函数检查整个 Request 参数集合,以给定的优先级搜索给定的参数名称

protected string GetParm(string parm, string defaultvalue)
{
  if (Request.Form[parm] != null && Request.Form[parm].Length > 0)
  {
   return Request.Form[parm];
  }

  if (Request.QueryString[parm] != null && Request.QueryString[parm].Length > 0)
  {
   return Request.QueryString[parm];
  }

  if (Session[parm] != null && Convert.ToString(Session[parm]).Length > 0)
  {
   return Convert.ToString(Session[parm]);
  }

  if (Request.Cookies[parm] != null && Request.Cookies[parm].Value.Length > 0)
  {
   return Request.Cookies[parm].Value;
  }

  return defaultvalue;
}

作为最后一个包装功能,我将向您展示如何使用一行代码在用户的计算机上删除 Cookie

DropCookie("MyCookieKey", "Hello World!");

大功告成!

结论

我希望您会发现基页类是您网站项目的一个很好的起点。 顺便说一句,这个基页就是“一个基页”;这意味着它可以根据您的要求进行定制,或者原样保留。

修订历史

  • 2006 年 3 月 21 日 - 提交文章。
  • 2006 年 3 月 29 日 - 向源代码添加了 Constants 类和 *Web.config* 文件。
  • 2006 年 3 月 31 日 - 修改了基页,以包含 HyperX 的“string.IsNullOrEmpty”建议。
© . All rights reserved.