使用 HttpApplication 对象ASP.NET 框架中的许多类都提供了许多很方便的属性可以直接映射到 HttpContext 类中定义的属性。这种交叠有一个很好的例子就是 HttpApplication,它就是全局应用类的基类,在下表中,你可以看到 HttpApplic ...
使用 HttpApplication 对象
get='_blank'>ASP.NET 框架中的许多类都提供了许多很方便的属性可以直接映射到 HttpContext 类中定义的属性。这种交叠有一个很好的例子就是 HttpApplication,它就是全局应用类的基类,在下表中,你可以看到 HttpApplication 类中定义的属性和方法。许多和 HttpContext 中定义的很相似。
表 1 – HttpApplication 类中定义的成员
名称 | 描述 |
Application | 对应到 HttpContext.Application 属性,通过它可以获取应用层面的状态数据。 |
CompleteRequest() | 终止当前请求的生命周期,直接跳转到 LogRequest 事件。 |
Context | 返回当前请求的 HttpContext 对象。 |
Init() | 每个注册模块上的 Init() 方法调用之后调用。 |
Modules | 返回一个 HttpModuleCollection 对象,当中详细描述了当前应用中的模块。 |
RegisterModule(type) | 注册新模块的静态方法。 |
Request | 返回 HttpContext.Request 值, 但是如果值为 null 的时候会抛出一个 HttpException。 |
Response | 返回 HttpContext.Response 值,但是如果值为 null 的时候会抛出一个 HttpException。 |
Server | 映射到 HttpContext.Server。 |
Session | 返回 HttpContext.Session 值,但是如果值为 null 的时候会抛出一个 HttpException。 |
大多数的这些成员都是很方便的属性可以映射到 HttpContext 类中的属性,但是有三个值得注意,接下来详细说明。
处理属性异常
Request, Response, Session 和 User 属性返回的是 HttpContext 类中相对应的属性的值,但是,这些属性如果从 HttpContext 上对应的属性中获取的值是 null 就会抛出一个 HttpException。
发生这样的事是因为 HttpApplication 类会为两种不同的生命周期接收通知:应用生命周期和请求生命周期。描述单个请求的对象是不可以在全局应用类中用来处理应用相关的事件,所以如果我们在处理应用层级的通知的时候使用了与请求相关联的属性就会抛出 HttpException 异常。
抛出这样一个异常的策略是非常粗糙的,因为这使得处理未知来源的 HttpApplication 对象非常困难,我们可以看一下下面的代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using System.Web.Routing; 7 8 namespace SimpleApp 9 {10 public class MvcApplication : System.Web.HttpApplication11 {12 public MvcApplication()13 {14 PostAcquireRequestState += (src, args) => CreateTimeStamp();15 }16 17 protected void Application_Start()18 {19 AreaRegistration.RegisterAllAreas();20 RouteConfig.RegisterRoutes(RouteTable.Routes);21 CreateTimeStamp();22 }23 24 private void CreateTimeStamp()25 {26 string stamp = Context.Timestamp.ToLongTimeString();27 if (Session != null)28 {29 Session["request_timestamp"] = stamp;30 }31 else32 {33 Application["app_timestamp"] = stamp;34 }35 }36 }37 }
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:[译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)
关键词:ASP.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。