1. 在Visual Studio 新建项目,模板为空,下面结构选择MVC。

2. 在项目中新建一个类MyModule,实现IHttpModule接口

namespace SimpleApp.Infrastructure
{
/// <summary>
/// 记录请求管道事件执行顺序
/// </summary>
public class MyModule : IHttpModule
{
public void Dispose()
{
} public void Init(HttpApplication context)
{
//下面是记录事件的执行
//提供自定义日志记录实现的示例
context.BeginRequest += (src, args) => RecordEvent(context); context.AuthenticateRequest += (src, args) => RecordEvent(context);
context.PostAuthenticateRequest += (src, args) => RecordEvent(context); context.AuthorizeRequest += (src, args) => RecordEvent(context);
context.PostAuthorizeRequest += (src, args) => RecordEvent(context); context.ResolveRequestCache += (src, args) => RecordEvent(context);
context.PostResolveRequestCache += (src, args) => RecordEvent(context); //MapRequestHandler:仅支持IIS7以上,Net Framwork3.0以上的集成模式
context.MapRequestHandler += (src, args) => RecordEvent(context);
context.PostMapRequestHandler += (src, args) => RecordEvent(context); context.AcquireRequestState += (src, args) => RecordEvent(context);
context.PostAcquireRequestState += (src, args) => RecordEvent(context); context.PreRequestHandlerExecute += (src, args) => RecordEvent(context);
context.PostRequestHandlerExecute += (src, args) => RecordEvent(context); context.ReleaseRequestState += (src, args) => RecordEvent(context);
context.PostReleaseRequestState += (src, args) => RecordEvent(context); context.UpdateRequestCache += (src, args) => RecordEvent(context);
context.PostUpdateRequestCache += (src, args) => RecordEvent(context); //LogRequest、PostLogRequest支持IIS7以上,Net Framwork3.0以上的集成模式
context.LogRequest += (src, args) => RecordEvent(context);
context.PostLogRequest += (src, args) => RecordEvent(context); context.EndRequest += (src, args) => RecordEvent(context); context.PreSendRequestHeaders += (src, args) => RecordEvent(context);
context.PreSendRequestContent += (src, args) => RecordEvent(context); context.Error += (src, args) => RecordEvent(context);
context.RequestCompleted += (src, args) => RecordEvent(context); context.Disposed += (src, args) => RecordEvent(context);
} private static int index = ;
private void RecordEvent(HttpApplication context)
{
index++;
string eventName = HttpContext.Current.CurrentNotification.ToString();
if (eventName== "BeginRequest")
{
index = ;
}
if (HttpContext.Current.IsPostNotification)
{
eventName = "Post" + eventName;
}
using (StreamWriter sw = new StreamWriter(@"d:\asplog.txt",true,Encoding.UTF8))
{
sw.WriteLine("=====================================");
sw.WriteLine(index+": "+eventName);
sw.WriteLine("=====================================");
sw.Flush();
}
}
} }

3. 在App_Start文件夹中,定义类ModuleRegistration,注册MyModule

using System.Web;

[assembly: PreApplicationStartMethod(typeof(SimpleApp.ModuleRegistration), "RegisterModule")]
namespace SimpleApp
{
public class ModuleRegistration
{
public static void RegisterModule()
{
HttpApplication.RegisterModule(typeof(SimpleApp.Infrastructure.MyModule));
}
}
}

4. 新建HomeController,并新建Index视图

5. ctrl+F5运行项目,然后关闭,在d盘可以看懂asplog.txt记录的请求管道中事件的执行顺序

ASP.NET MVC自定义Module记录管道事件执行顺序的更多相关文章

  1. Asp.net mvc 自定义全局的错误事件HandleErrorAttribute无效

    Asp.net mvc 自定义全局的错误事件HandleErrorAttribute,结果无效, 原因: 1.没有在RegisterGlobalFilters 里面添加或者你要的位置添加. 2.你把这 ...

  2. Asp.Net MVC 的19个管道事件

    httpApplication调用ProcessRequest方法,内部执行19个管道事件,如下 BeginRequest  开始处理请求 AuthenticateRequest 授权验证请求开始,获 ...

  3. asp.net mvc 自定义pager封装与优化

    asp.net mvc 自定义pager封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自 ...

  4. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  5. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  6. ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

    前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...

  7. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

  8. asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值

    asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...

  9. ASP.NET Page对象各事件执行顺序(转)

    很久没写 asp.net 的东西了,search 了一下 page 的事件执行顺序,找到如下的东西,仅仅做记录用 Page.PreInit 在页初始化开始时发生 Page.Init 当服务器控件初始化 ...

随机推荐

  1. Ubuntu 18.04上安装 phpMyAdmin

    我们将安装 phpMyAdmin 在 Ubuntu18.04 上配合 Apache 一起工作. 在安装 phpMyAdmin 之前需要已经安装了LAMP栈并提供了web页面. 如果没有安装可以参照 U ...

  2. LGBMClassifier参数

    本文链接:https://blog.csdn.net/starmoth/article/details/845867091.boosting_type=‘gbdt’# 提升树的类型 gbdt,dart ...

  3. html 后手

    1.a (1.)超链接 <a href="new.html">点击进入到新网页</a>这里可以直接跳转到一个页面 <a href="http ...

  4. SQL-on-Hadoop 技术

    SQL-on-Hadoop 技术 备注 Apache Hive Cloudera Impala Facebook Presto Apache Drill Spark SQL Apache Phoeni ...

  5. 微信小程序,知识点

    对于小程序的授权,只要用户授权一次,该授权关系就会记录在后台,除非删除小程序,或者用户在设置中关闭该授权. 官方文档: https://developers.weixin.qq.com/minipro ...

  6. LoadRunner Controller集合点策略灰色问题 解决

    1.脚本里已经添加了集合点,但是在Controller里集合点策略是灰色的无法点击 2.问题解决: 将下图的勾选项去掉即可(系统默认是勾选上的) 去掉勾选后可以选择了:

  7. svn版本库操作(四)

    一.使用命令行模式访问 SVN 服务器 1. 检出(checkout) (1) 首先进入自己的工作目录,例如:D:\svnSpace cd D:\svnSpace (2) 运行 svn checkou ...

  8. zz先睹为快:神经网络顶会ICLR 2019论文热点分析

    先睹为快:神经网络顶会ICLR 2019论文热点分析 - lqfarmer的文章 - 知乎 https://zhuanlan.zhihu.com/p/53011934 作者:lqfarmer链接:ht ...

  9. postgres 字符操作补位,字符切割

    补位: ,'); -- 字符切割 并取值: )

  10. n8n 试用

    前边有简单的介绍n8n,如果大家看了官方网站会有一个比较醒目的说明zapier以及tray.io的开源替代方案 以下是一个简单的试用 环境准备 docker-compose 文件   version: ...