ASP.Net应用程序生命周期

  • ASP.Net应用程序生命周期概述
  1. 阶段①用户从Web服务器请求应用程序资源

ASP.NET是Web服务器下的ISAPI扩展

ASP.NET根据文件扩展名(.aspx/.asmx/.ascx/trace.axd)将HTTP请求映射到HTTP处理程序(ASP.NET页处理程序/Web服务处理程序/ASP.NET用户控件处理程序/跟踪处理程序)

  1. 阶段②ASP.Net接收对应用程序的第一个请求

ApplicationManager类创建一个应用程序域(为全局变量提供应用程序隔离并允许单独卸载每个应用程序)

在应用程序域中创建HostingEnvironment类的实例(提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问)  

  1. 阶段③为每个请求创建ASP.NET核心对象

HttpRuntime类: 为当前应用程序提供一组ASP.NET运行时服务(在处理HTTP请求的ASP.NET管线模型的开头使用 ProcessRequest()方法驱动所有后续的ASP.NET Web处理)

创建HttpContext类(HttpRequest HttpResponse Session Server…)

  1. 阶段④将HttpApplication对象分配给请求
  2. 阶段⑤由HttpApplication管线处理请求
HttpApplication事件列表
  • 总结
  1. ApplicationManager---应用程序域---HostingEnvironment
  2. HttpRuntime---HttpContext---HttpApplication
  • HttpContext
  1. 无法取得HttpContext时(如Global.asax)可通过HttpContext.Current获取当前HttpContext
  • HttpRequest
  1. .AppRelativeCurrentExecutionFilePath: 获取当前请求相对于应用的虚拟路径
~/路径/路径1/a.ashx
  1. .PhysicalApplicationPath: 获取当前应用的物理路径(磁盘路径)
D:\我的文档\Visual Studio 2008\WebSites\WebSite4\
  1. .PhysicalPath: 获取当前请求的物理路径(磁盘路径)
D:\我的文档\Visual Studio 2008\WebSites\WebSite4\a.ashx
  1. .RawUrl/.Url: 获得原始Url/获得请求的Url(区别涉及到Url的重写问题)
/WebSite1/路径/路径1/a.ashx
http://localhost:2209/WebSite1/路径/路径1/a.ashx
  1. .UrlReferer(Url类型对象/不是string字符串): 网页来源(通过http报文获取/可以通过该属性判断百度搜索的哪个关键词or防下载盗链or防图片盗链(可以伪造/如迅雷))
(.ashx)if( context.Request.UrlReferer.Host == “localhost” );
  1. .UserHostAddress: 获取访问者IP地址
  2. .UserLanguages: 获得访问者浏览器支持的语言
  3. .Cookies: 获取浏览器端发送的Cookie值
  4. .MaoPath(): 将虚拟路径转换为磁盘上的物理路径/效果等同于HttpServerUtility.MapPath()方法
  5. HttpServerUtility类: 提供用于处理Web请求的Helper方法
  • HttpResponse
  1. 响应的缓存输出: 为了提高服务器性能 ASP.NET向浏览器Write的时候并不会每Write一次都会立即输出到浏览器 而是会缓存数据 到合适的时机或者响应结束才会将缓存区(服务器端)中的数据一起发送到浏览器
  2. .Buffer/.BufferOutput(bool值): 表示是否对当前页面采用缓存(默认值true/经Reflector反编译发现 .Buffer内部调用.BufferOutput)
  3. .Flush(): 将缓存区中的数据发送给浏览器(非常适合Write()数据立即发送给浏览器的场合 如安装程序的进度显示or大批量数据导入时显示正在导入第*条数据)
  4. .Clear(): 清空缓存区中的数据
  5. .ContentType: 输出流内容类型(如text/html text/plain image/JPEG)
  6. .ContentEncoding: 输出流编码(ASP.NET程序可以忽略)
  7. .Cookies/.SetCookie(): 返回给浏览器的Cookie集合/写入Cookie
  8. .End(): 终止响应(之前缓存区中的数据发送给浏览器端 之后的代码停止执行)
  9. .Redirect(rl): 重定向浏览器到新的网址/可用于防止浏览器”重试”刷新
  10. .OutputStream(System.IO.Stream): 启用到输出HTTP内容主体的二进制输出(html内容使用.Write()/非html内容则使用.OutputStream((写入什么得到什么)))
  11. .Write(): 向浏览器端输出内容
  12. .WriteFile(): 向浏览器端输出文件
WriteFile(“c:/boot.ini”)
  • HttpServerUtility
  1. .HtmlEncode()/.HtmlDecode()/ .UrlEncode()/.UrlDecode(): 
①内部调用HttpUtility类方法(推荐HttpUtility)
②区别(HtmlEncode---XSS漏洞/UrlEncode---非ASCⅡ码(如中文))
  1. .Transfer() & HttpResponse.Redirect(): 
①Transfer()---服务器端---地址不变/Redirect()---浏览器端---地址变化
②Transfer()可访问来源页面参数信息(如Cookies)
③Transfer()不能重定向外部网站
④无法重定向.ashx
  1. .MapPath()

posted on 2011-09-19 21:19  les_vies  阅读(257)  评论(0编辑  收藏  举报

导航