你的位置:首页 > 软件开发 > ASP.net > [译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)

[译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)

发布时间:2016-02-18 17:00:20
使用 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 对象非常困难,我们可以看一下下面的代码:

[译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)[译] ASP.NET 生命周期 – ASP.NET 上下文对象(六)
 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 (#换成@)。