最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mvc動(dòng)態(tài)注冊HttpModule詳解

 更新時(shí)間:2017年03月01日 12:00:43   作者:張龍豪  
本文主要介紹了Mvc動(dòng)態(tài)注冊HttpModule的方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧

序言

注冊Httpmodule可以讓我們使用HttpApplication對象中的處理管道事件。目前大家所熟知的應(yīng)該有2種方式來使用HttpApplication對象中的處理管道事件。第一種是通過Global.asax全局文件,另外一種是通過配置文件來注冊httpmodule。那么有這2種方式啦,為什么還要有今天這篇博客呢?

這里我也提1個(gè)簡單的問題,用實(shí)例來證明下動(dòng)態(tài)注冊httpmodule的可取之處。

如果你要寫一個(gè).net框架,供公司所有mvc項(xiàng)目使用,那么你的框架集成的眾多功能中,至少應(yīng)該需要一個(gè)異常記錄的功能吧,有啦這個(gè)功能之后,別人的項(xiàng)目即便忘記處理異常信息,那么框架也會(huì)幫忙一個(gè)不拉的將項(xiàng)目異常信息寫入框架的日志當(dāng)中,還有你的框架要叼,怎么叼呢?叼到別人不需要寫如一行代碼即可實(shí)現(xiàn)這樣的功能,哇咔,怎么實(shí)現(xiàn)?在你的框架中,只需要幾行代碼即可。

Microsoft.Web.Infrastructure.dll與PreApplicationStartMethodAttribute屬性

首先我們利用ilspy來看下Microsoft.Web.Infrastructure.dll這個(gè)類庫是干什么的,如圖:

 

[SecuritySafeCritical]
public static void RegisterModule(Type moduleType)
{
  if (DynamicModuleReflectionUtil.Fx45RegisterModuleDelegate != null)
  {
DynamicModuleReflectionUtil.Fx45RegisterModuleDelegate(moduleType);
    return;
  }DynamicModuleUtility.LegacyModuleRegistrar.RegisterModule(moduleType);
}

那看到此類庫的源碼之后,便可以順藤摸瓜,看清其真面目啦。

  1. Microsoft.Web.Infrastructure.DynamicModuleHelper 此命名空間我們可以看出他是關(guān)于動(dòng)態(tài)module的helper 。
  2. DynamicModuleUtility此類便是實(shí)用類,那么打開之后,便看到啦一個(gè)醒目的方法,RegisterModule,注冊Module,沒錯(cuò)他就是動(dòng)態(tài)注冊HttoModule的方法。

思考一下上面我的命題,是在項(xiàng)目中一行代碼不用便可執(zhí)行我們的類庫,那么動(dòng)態(tài)注冊HttpModule有啦,接下來就是怎么一行代碼不寫,就能運(yùn)行我們的類庫呢?這就用到啦微軟提供的PreApplicationStartMethodAttribute 屬性。

  1. PreApplicationStartMethodAttribute:此屬性也可以望文生義,便是在application啟動(dòng)之前要運(yùn)行的方法。就是說他也是一個(gè)程序的入口點(diǎn),并且還是application初始化之前便啟動(dòng)啦,萬物之初先有的便是它,造作吧。
  2. WebActivatorEx:這是一個(gè)類庫,微軟提供啦PreApplicationStartMethodAttribute特性,微軟Nuget開發(fā)小組有一個(gè)成員David Ebbo寫啦這個(gè)更叼的類庫,內(nèi)容如下圖

呢,這個(gè)類庫可以動(dòng)態(tài)注冊HttpMoudle,他還實(shí)現(xiàn)不修改全局文件就可以加入,Application_Start()/Shutdown()事件,源碼你可以使用ilspy查看,也有項(xiàng)目的git地址,通過nuget可以獲取,值得你去研究下。

代碼實(shí)現(xiàn)動(dòng)態(tài)注冊HttpMoudle

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(RoutingCore.PreApplicationStartRegist), "PreStart")]
namespace RoutingCore
{
  public class PreApplicationStartRegist
  {
    private static bool hasLoaded;
    public static void PreStart()
    {
      if (!hasLoaded)
      {
        hasLoaded = true;
        DynamicModuleUtility.RegisterModule(typeof(RoutingModule));
      }
    }
  }
}
public class RoutingModule : IHttpModule
  {
    public void Init(HttpApplication context)
    {
      context.BeginRequest += new EventHandler(context_BeginRequest);
      context.Error += new EventHandler(context_ErrorRequest);
    }
    void context_BeginRequest(object sender, EventArgs e)
    {
    }
    void context_ErrorRequest(object sender, EventArgs e)
    {
      HttpApplication ap = sender as HttpApplication;
      var error = ap.Server.GetLastError();
      var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500;
      if (code != 404)
      {
      }
      // 寫入本地文件,隊(duì)列或數(shù)據(jù)庫 
      // ...          
      ap.Server.ClearError();
      ap.Response.Write(error.Message);
      ap.Response.End();
    }
    public void Dispose() { }
  }

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

最新評論

介休市| 安陆市| 敖汉旗| 文山县| 南郑县| 崇义县| 名山县| 日土县| 微博| 舞阳县| 洞头县| 阿拉尔市| 乐至县| 庐江县| 彭州市| 应城市| 六枝特区| 嵊州市| 福泉市| 灵台县| 新乡县| 蓬溪县| 集贤县| 万载县| 那曲县| 东乌珠穆沁旗| 墨玉县| 射阳县| 泰安市| 含山县| 濉溪县| 枣庄市| 宜春市| 巨鹿县| 穆棱市| 察雅县| 惠安县| 墨竹工卡县| 峨眉山市| 江北区| 阳东县|