全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Mvc动态注册HttpModule详解

序言

注册Httpmodule可以让我们使用HttpApplication对象中的处理管道事件。目前大家所熟知的应该有2种方式来使用HttpApplication对象中的处理管道事件。第一种是通过Global.asax全局文件,另外一种是通过配置文件来注册httpmodule。那么有这2种方式啦,为什么还要有今天这篇博客呢?

这里我也提1个简单的问题,用实例来证明下动态注册httpmodule的可取之处。

如果你要写一个.net框架,供公司所有mvc项目使用,那么你的框架集成的众多功能中,至少应该需要一个异常记录的功能吧,有啦这个功能之后,别人的项目即便忘记处理异常信息,那么框架也会帮忙一个不拉的将项目异常信息写入框架的日志当中,还有你的框架要叼,怎么叼呢?叼到别人不需要写如一行代码即可实现这样的功能,哇咔,怎么实现?在你的框架中,只需要几行代码即可。

Microsoft.Web.Infrastructure.dll与PreApplicationStartMethodAttribute属性

首先我们利用ilspy来看下Microsoft.Web.Infrastructure.dll这个类库是干什么的,如图:

 

[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写啦这个更叼的类库,内容如下图

呢,这个类库可以动态注册HttpMoudle,他还实现不修改全局文件就可以加入,Application_Start()/Shutdown()事件,源码你可以使用ilspy查看,也有项目的git地址,通过nuget可以获取,值得你去研究下。

代码实现动态注册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  # asp.net 请求输入到输出的全过程及httpHandler和httpModuler详细介绍  # Asp.net使用HttpModule压缩并删除空白Html请求的实现代码  # asp.net 通过httpModule计算页面的执行时间  # asp.net通过HttpModule自动在Url地址上添加参数  # asp.net利用HttpModule实现防sql注入  # 类库  # 微软  # 便可  # 要写  # 象中  # 是一个  # 我也  # 望文生义  # 如果你  # 是在  # 也有  # 顺藤摸瓜  # 也会  # 你可以  # 就能  # 他是  # 让我们  # 他也  # 之处  # 要有 


相关文章: 大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何选择CMS系统实现快速建站与SEO优化?  建站为何优先选择香港服务器?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何在西部数码注册域名并快速搭建网站?  如何通过山东自助建站平台快速注册域名?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站之星好吗?新手能否轻松上手建站?  如何快速选择适合个人网站的云服务器配置?  如何快速登录WAP自助建站平台?  建站之星如何快速生成多端适配网站?  制作公司内部网站有哪些,内网如何建网站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何快速辨别茅台真假?关键步骤解析  建站之星备案流程有哪些注意事项?  如何在云主机快速搭建网站站点?  已有域名和空间如何搭建网站?  建站之星24小时客服电话如何获取?  ,在苏州找工作,上哪个网站比较好?  香港服务器租用每月最低只需15元?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站主机SSH密钥生成步骤及常见问题解答?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  网站制作报价单模板图片,小松挖机官方网站报价?  如何挑选最适合建站的高性能VPS主机?  建站主机CVM配置优化、SEO策略与性能提升指南  微信小程序 input输入框控件详解及实例(多种示例)  如何规划企业建站流程的关键步骤?  定制建站流程解析:需求评估与SEO优化功能开发指南  专业网站建设制作报价,网页设计制作要考什么证?  香港网站服务器数量如何影响SEO优化效果?  外贸公司网站制作哪家好,maersk船公司官网?  如何在IIS服务器上快速部署高效网站?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  建站之星后台密码如何安全设置与找回?  建站主机选虚拟主机还是云服务器更好?  定制建站是什么?如何实现个性化需求?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何快速使用云服务器搭建个人网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  Android滚轮选择时间控件使用详解  建站org新手必看:2024最新搭建流程与模板选择技巧  海南网站制作公司有哪些,海口网是哪家的?  上海网站制作开发公司,上海买房比较好的网站有哪些?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  南京网站制作费用,南京远驱官方网站?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何批量查询域名的建站时间记录?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  C#如何序列化对象为XML XmlSerializer用法 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。