91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mvc動態注冊HttpModule的示例分析

發布時間:2021-08-17 11:02:44 來源:億速云 閱讀:153 作者:小新 欄目:開發技術

這篇文章主要介紹Mvc動態注冊HttpModule的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Microsoft.Web.Infrastructure.dll與PreApplicationStartMethodAttribute屬性

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

 Mvc動態注冊HttpModule的示例分析

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

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

  1. Microsoft.Web.Infrastructure.DynamicModuleHelper 此命名空間我們可以看出他是關于動態module的helper 。

  2. DynamicModuleUtility此類便是實用類,那么打開之后,便看到啦一個醒目的方法,RegisterModule,注冊Module,沒錯他就是動態注冊HttoModule的方法。

思考一下上面我的命題,是在項目中一行代碼不用便可執行我們的類庫,那么動態注冊HttpModule有啦,接下來就是怎么一行代碼不寫,就能運行我們的類庫呢?這就用到啦微軟提供的PreApplicationStartMethodAttribute 屬性。

  1. PreApplicationStartMethodAttribute:此屬性也可以望文生義,便是在application啟動之前要運行的方法。就是說他也是一個程序的入口點,并且還是application初始化之前便啟動啦,萬物之初先有的便是它,造作吧。

  2. WebActivatorEx:這是一個類庫,微軟提供啦PreApplicationStartMethodAttribute特性,微軟Nuget開發小組有一個成員David Ebbo寫啦這個更叼的類庫,內容如下圖

Mvc動態注冊HttpModule的示例分析

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

Mvc動態注冊HttpModule的示例分析

代碼實現動態注冊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)
      {
      }
      // 寫入本地文件,隊列或數據庫 
      // ...          
      ap.Server.ClearError();
      ap.Response.Write(error.Message);
      ap.Response.End();
    }
    public void Dispose() { }
  }

以上是“Mvc動態注冊HttpModule的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西城区| 三原县| 海伦市| 陆河县| 桂林市| 时尚| 新宁县| 全南县| 上饶县| 大同县| 新宁县| 莎车县| 卢湾区| 闽侯县| 襄城县| 黄石市| 从化市| 当雄县| 连云港市| 双桥区| 汕头市| 富民县| 山丹县| 六枝特区| 水富县| 黑水县| 阳朔县| 菏泽市| 资兴市| 莲花县| 太原市| 商洛市| 信阳市| 庄浪县| 靖江市| 富民县| 本溪市| 花垣县| 保亭| 武邑县| 获嘉县|