請求上下文HttpContext解釋


1 HttpContext上下文作用

   有關應用程序狀態信息,處理的請求以及構建的響應等信息全部通過HttpContext上下文獲取

2 Httpcontext類用於從頭至尾跟蹤請求的狀態,他也是有關請求的所有可用信息(包括httpRequest和httpResponse對象)的通道

3 模塊

  模塊將實現System.web.IHttpModule接口,System.web.IHttpModule接口有兩個方法

   Init(app):實例化模塊類並將其傳遞給HttpApplication實例時,調用此方法。使用此方法可為HttpApplication事件注冊處理程序方法。

  Dispose()  在完成請求處理后調用此方法

模塊將在新建HttpApplication對象時進行實例化,每個HttpApplication對象都會獲取它自己的一組模塊對象,在實例化模塊時將調用Init()方法,

和HttpApplication對象一樣,模塊也可用於處理多個請求(但一次只處理一個請求)

 

4 如何創建自定義的模塊

創建一個實現IHttpModule的類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Events
{
    /// <summary>
    /// 模塊功能,防止未通過身份驗證的用戶訪問指定的窗體
    /// </summary>
    public class ParamsModule : IHttpModule
    {
        public void Dispose()
        {
            
        }

        public void Init(HttpApplication app)
        {
            app.PostAuthenticateRequest += (src, args) => 
            {
                if (app.Request.Url.LocalPath=="/Params.aspx"&&!app.User.Identity.IsAuthenticated)
                {
                    app.Context.AddError(new UnauthorizedAccessException());
                }
            };
        }
    }
}


 第二部注冊自定義的模塊(asp.net framework不會自動搜索模塊類),使它成為生命周期的一部分,在web.config文件中注冊

  <system.webServer>
    <modules>
      <add name="ParamsProtecttion" type="Events.ParamsModule"/>
    </modules>
  </system.webServer>

 

如何讓模塊自動注冊到asp.net framework,而不用使用配置?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

//特性告訴asp.net fromework他應在應用程序啟動時調用ModuleRegistration類中的RegisterModules方法
[assembly:PreApplicationStartMethod(typeof(CommonModules.ModuleRegistration), "RegisterModules")]
namespace CommonModules
{
    public  class ModuleRegistration
    {
        public static void RegisterModules()
        {
            Type[] moduleTypes =
            {
                typeof(CommonModules.TimerModule),
                typeof(CommonModules.LogModule)
            };

            foreach (Type item in moduleTypes)
            {
                HttpApplication.RegisterModule(item);
            }
        }
    }
}

這樣就不用在web.config文件中注冊了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM