Global.asax文档和asp中的Global.asa文件的功能是一样的,都是用来宿主Application对象的事件的处理处理程序,然asp.net中的这个文件在内容上却和asp中的差别巨大,不可同日而语,再者在asp.net中Application对象和Session对象都是system.web命名空间的东东,确切的说应该是system.web.httpApplication类,它实现了一系列的接口和一系列的事件,非常强大,大家可以查看sdk文档。

下面我们来看看Petshop3.0中的Global.asax文档到底实现了什么:

using System;

using System.Web;

-------------------------------------

引用system.Web命名空间,我们所用到的大部分的对象如request、response、cache等对象都在这个命名空间中

-----------------------------------------

using System.Diagnostics;

--------------------------------

应用程序跟踪,日志处理等功能的类在这个命名空间中

---------------------------------

using System.Configuration;

--------------------------

处理web.config文件时,用这个命名空间中的类

namespace PetShop.Web

{

public class Global : HttpApplication   //类Global继承自HttpApplication,可以应用所能应用到的所有的功能

{

// Read in the name of the event log to use from web.config

private static string LOG_SOURCE = ConfigurationSettings.AppSettings["Event Log Source"];

//读取web.config文件中Event Log Source键值的值

protected void Application_Error(object sender, EventArgs e)

{

// If an exception is thrown in the application then log it to an event log

Exception x = Server.GetLastError().GetBaseException();

EventLog.WriteEntry(LOG_SOURCE, x.ToString(), EventLogEntryType.Error);

}

//上面的是一个全局的事件错误处理程序,把出现的错误写入到日志中

/// <summary>

/// Custom caching using the VaryByCustom attribute in the

/// OuputCache directive.

/// </summary>

/// <param name="context">The current HTTP request</param>

/// <param name="arg">Custom cache argument</param>

/// <returns>Cache key</returns>

public override string GetVaryByCustomString(HttpContext context, String arg) {

//重载HttpApplication中GetVaryByCustomString函数方法,返回值是一个字符串,功能是实现一个全局的根据当前请求context.Request中变量的不同生成不同的Cache的键值,以区分当前请求是否已经被验证,WebComponents.CleanString.InputText是应用程序中实现的一个处理表单输入字符串处理的类,我们可以在WebComponents文件加中看到CleanString这个类

// cache key that is returned

string cacheKey = "";

switch(arg) {

// Custom caching for header control. We want to create two views

// of the header... one if the user is logged in and another if

// they are logged out.

// We us the forms authentication flag to check if the user is logged in or not

// Category page

case "CategoryPageKey":

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + WebComponents.CleanString.InputText(context.Request.QueryString["categoryId"], 50) + WebComponents.CleanString.InputText(context.Request.QueryString["page"], 15);

}

else {

cacheKey = "AAA" + WebComponents.CleanString.InputText(context.Request.QueryString["categoryId"], 50) + WebComponents.CleanString.InputText(context.Request.QueryString["page"], 15);

}

break;

// Search page

case "SearchPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + WebComponents.CleanString.InputText(context.Request.QueryString["keywords"], 50) + WebComponents.CleanString.InputText(context.Request["page"], 15);

}

else {

cacheKey = "AAA" + WebComponents.CleanString.InputText(context.Request.QueryString["keywords"], 50) + WebComponents.CleanString.InputText(context.Request["page"], 15);

}

break;

// Item page

case "ItemPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + WebComponents.CleanString.InputText(context.Request.QueryString["productId"], 50) + WebComponents.CleanString.InputText(context.Request.QueryString["page"], 15);

}

else {

cacheKey = "AAA" + WebComponents.CleanString.InputText(context.Request.QueryString["productId"], 50) + WebComponents.CleanString.InputText(context.Request.QueryString["page"], 15);

}

break;

// Item details page

case "ItemDetailsPageKey" :

if (Request.IsAuthenticated == true) {

cacheKey = "QQQ" + WebComponents.CleanString.InputText(context.Request.QueryString["itemId"], 50);

}

else {

cacheKey = "AAA" + WebComponents.CleanString.InputText(context.Request.QueryString["itemId"], 50);

}

break;

// Used for pages such as help and default

case "UserId" :

if (Request.IsAuthenticated == true) {

cacheKey = "UserIdIn";

}

else {

cacheKey = "UserIdOut";

}

break;

}

return cacheKey;

}

}

}

总体上来说在petshop3.0这个文件中,主要是实现了一个处理全局错误的事件处理程序和一个功能是实现一个全局的根据当前请求context.Request中变量的不同生成不同的Cache的键值,以区分当前请求是否已经被验证的方法,但这个文件还可以生成更加强大的高级功能,在以后的学习中,多分析高手们的源代码,以期能够在自己的开发中应用。

Petshop3.0学习笔记(二)Global.asax文档分析相关推荐

  1. 【学习笔记】Windows格式文档转换成Unix格式

    [学习笔记]Windows格式文档转换成Unix格式 我们有时候需要将文档格式从Windows格式转换成Unix格式,Windows下换行是\r\n,而Unix下换行是\n,所以只需要将文档中的\r去 ...

  2. Vue2.0学习笔记二 基础语法

    1. Mustache语法 Mustache语法也叫插值表达式,Mustache语法式通过{{}}渲染到页面,并且数据是响应式的. 数据的响应式:数据的变化导致页面的内容随之变化 效果图: 2. 指令 ...

  3. HTML5+CSS3学习笔记(三)文档流和盒子模型【附练习:图片列表、左侧导航栏】

    HTML5+CSS3学习笔记(三) 本系列更多文章,可以查看专栏 HTML+CSS学习笔记 文章目录 HTML5+CSS3学习笔记(三) 一.CSS布局 1. 文档流(块级元素.行内元素.行内块元素) ...

  4. 【学习笔记】git 使用文档

    安装 git # mac 环境 brew install git 检查是否安装成功 ➜ ~ git --version git version 2.20.1 (Apple Git-117) 卸载 gi ...

  5. php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件

    将word文档转化为HTML文件 function wordTohtml($wfilepath) { $word=new COM("Word.Application") or di ...

  6. 【Word】学习笔记|批量解决文档中公式编号不居中的问题

    1. 问题描述 当你将一个Word中内容(包含公式)复制到另外一个Ward里,发现MathType公式编号未居中,如上图所示.如果你公式较少,可以参考官方教程解决,就是将段落→中文版式→文本对齐方式中 ...

  7. WPF-学习笔记 获取我的文档路径

    获取我的文档路径:Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 语句返回的是string值,但没有最后的 \ 档, ...

  8. 通关!游戏设计之道的学习笔记(四)文档

    一款游戏,你得从游戏的设计文档开始做起.在游戏开放的筹备阶段,需要有以下4中文档来帮忙进行工作:①单页说明书②十页说明书③游戏流程表④游戏设计文档,简写为GDO. 单页说明书 包含以下信息: 1.游戏 ...

  9. Flexe2.0 学习笔记二(利用PopUpManager实现一个组件登录窗体)

    通过对代码的学习实现了一个登录窗体的显示,还未涉及到参数的传递,这次的问题是窗体位置的控制需要如何解决?努力学习ing..... 代码下载 问题已解决 只要在 helpWindow = TitleWi ...

最新文章

  1. laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型
  2. Stylus插件开发教程
  3. JavaScript高级程序设计学习笔记6:正则表达式
  4. [Java基础]Math类的常用方法
  5. 游戏扫码登录器程序PHP源码版
  6. mysql存储引擎 sql_MySQL——存储引擎与SQL数据类型
  7. 京东双 11 大促价疑遭提前泄露;库克:iPhone 11 中国定价策略成功;GitLab 重大安全版本更新 | 极客头条...
  8. Eclipse 中Alt+/快捷键失效的解决办法。
  9. Jupyter Notebook又一懒人神器,拖拽生成Python代码
  10. 怎么删除win10 C盘Hiberfil.sys文件,Hiberfil.sys文件删了有没有事?
  11. 论文笔记:Reasoning about Entailment with Neural Attention
  12. Steam账号注册--流程
  13. opencv学习-高斯金字塔和拉普拉斯金字塔
  14. Bongo Cat桌面小猫咪单手双手全键盘,写代码效果太舒服
  15. 2022年最新全国各省五级行政区划代码及名称数据(省-市-区县-乡镇-村)
  16. 如何用python生成随机密码?(简单易上手版)
  17. 新视野大学英语(第三版)视听说4Unit6必修答案
  18. ext4magic恢复误删的目录文件测试(ext3/4)
  19. M-JPEG、MPEG4、H.264都有何区别
  20. matlab中特殊符号ommiga,在MATLAB中输入特殊符号---方法集锦

热门文章

  1. Xcode7.1环境下上架iOS App到AppStore 流程 (2)
  2. 用python写脚本筛选原创微博_基于python编写的微博应用
  3. Python实战案例,CV2模块,Python实现抖音字符视频
  4. a连接带id转送不了数据_你找到了数据清洗利器?
  5. python post json数据_Python POST Json数据到Http
  6. python数据逆透视_PIVOT(透视转换)和UNPIVOT(逆透视转换)
  7. 声明与已声明不兼容_中兴今日发声明:专注芯片设计 不具备芯片制造能力
  8. 语言输出奇树有多少总方法_如何学习一门编程语言?这些方法告诉你,不要再说你不会学习...
  9. 虚幻争霸服务器维护,《虚幻争霸》将于4月停止运营 玩家可全额退款
  10. wps 模拟分析 规划求解_入行十年,我是如何解决模流分析准确性问题的