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