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. CentOS7 配置 SSH监听多个端口方法

    一.修改ssh默认端口,防止暴力破解,让系统安全多一点点: i. 在配置文件/etc/ssh/sshd_config文件中修改 Port #AddressFamily any #ListenAddre ...

  2. 论文笔记系列-AutoFPN

    原论文:Auto-FPN: Automatic Network Architecture Adaptation for Object Detection Beyond Classification 之前 ...

  3. fd (int)读写文件

    #include <string.h> #include <stdio.h> #include <fcntl.h> int main() { char *p1 = ...

  4. Ant下载与安装

    1.登录http://ant.apache.org/bindownload.cgi 站点下载Ant最新版建议Windows平台下载*.zip压缩包 2.将下载到的压缩文件压缩到(G:software\ ...

  5. USACO Agri-Net

    洛谷 P1546 最短网络 Agri-Net https://www.luogu.org/problemnew/show/P1546 JDOJ 1696: Agri-Net https://neooj ...

  6. 【转】用C语言实现FFT算法

    傅里叶变换 快速傅里叶变换(Fast Fourier Transform,FFT)是一种可在  时间内完成的离散傅里叶变换(Discrete Fourier transform,DFT)算法. 在算法 ...

  7. Xamarin.Forms移动开发系列3:项目剖析

    摘要 本文主要进行Xamarin.Forms应用程序剖析. 前言 本文介绍Xamarin.Forms应用程序剖析. 由于本系列重点研究对象为Xamarin.Forms,所以对Xamarin.Andro ...

  8. MySQL实战45讲学习笔记:第十四讲

    一.引子 在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条 select count(*) from t 语句不就解决了吗? 但是,你会发现 ...

  9. HTTP协议,到底是什么鬼?

    作者 | Jeskson 来源 | 达达前端小酒馆 了解HTTP HTTP是什么呢?它是超文本传输协议,HTTP是缩写,它的全英文名是HyperText Transfer Protocol. 那么什么 ...

  10. DVWA CSRF 通关教程

    CSRF 介绍 CSRF,全称Cross-site request forgery,即跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者访问包含攻击代码 ...