序言

注册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);
}
那看到此类库的源码之后,便可以顺藤摸瓜,看清其真面目啦。
思考一下上面我的命题,是在项目中一行代码不用便可执行我们的类库,那么动态注册HttpModule有啦,接下来就是怎么一行代码不写,就能运行我们的类库呢?这就用到啦微软提供的PreApplicationStartMethodAttribute 属性。
呢,这个类库可以动态注册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注入
# 类库
# 微软
# 便可
# 要写
# 象中
# 是一个
# 我也
# 望文生义
# 如果你
# 是在
# 也有
# 顺藤摸瓜
# 也会
# 你可以
# 就能
# 他是
# 让我们
# 他也
# 之处
# 要有
相关文章:
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星安装后如何配置SEO及设计样式?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
视频网站制作教程,怎么样制作优酷网的小视频?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
建站之星代理费用多少?最新价格详情介绍
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
专业商城网站制作公司有哪些,pi商城官网是哪个?
建站之星后台密码如何安全设置与找回?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
c# 服务器GC和工作站GC的区别和设置
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何在Windows环境下新建FTP站点并设置权限?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
简单实现Android文件上传
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
网站设计制作公司地址,网站建设比较好的公司都有哪些?
已有域名如何快速搭建专属网站?
常州企业网站制作公司,全国继续教育网怎么登录?
北京网站制作的公司有哪些,北京白云观官方网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
Swift中swift中的switch 语句
如何快速搭建支持数据库操作的智能建站平台?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
郑州企业网站制作公司,郑州招聘网站有哪些?
Android自定义listview布局实现上拉加载下拉刷新功能
公众号网站制作网页,微信公众号怎么制作?
javascript中对象的定义、使用以及对象和原型链操作小结
如何制作一个表白网站视频,关于勇敢表白的小标题?
网站制作模板下载什么软件,ppt模板免费下载网站?
如何用5美元大硬盘VPS安全高效搭建个人网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
三星网站视频制作教程下载,三星w23网页如何全屏?
如何用PHP快速搭建CMS系统?
专业公司网站制作公司,用什么语言做企业网站比较好?
建站主机核心功能解析:服务器选择与网站搭建流程指南
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星收费标准详解:套餐费用及年费价格表一览
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何制作网站标识牌,动态网站如何制作(教程)?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
建站主机SSH密钥生成步骤及常见问题解答?
如何选择靠谱的建站公司加盟品牌?
,南京靠谱的征婚网站?
如何快速生成凡客建站的专业级图册?
在线制作视频网站免费,都有哪些好的动漫网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。