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. python中优雅的杀死线程

    上一篇博客中,杀死线程采用的方法是在线程中抛出异常   https://www.cnblogs.com/lucky-heng/p/11986091.html, 这种方法是强制杀死线程,但是如果线程中涉 ...

  2. Linux进程管理 (篇外)内核线程简要介绍【转】

    转自:https://www.cnblogs.com/arnoldlu/p/8336998.html 关键词:kthread.irq.ksoftirqd.kworker.workqueues 在使用p ...

  3. linux 通过wol远程开机【转】

    转自:http://yangbajing.blog.chinaunix.net/uid-10480699-id-5179860.html 今天发现个可以对linux服务器进行远程开机的软件-wakeo ...

  4. Transformer模型---encoder

    一.简介 论文链接:<Attention is all you need> 由google团队在2017年发表于NIPS,Transformer 是一种新的.基于 attention 机制 ...

  5. jmeter压测学习5-XPath提取器

    前言 有些web项目是前后端不分离的,返回的内容不是那种纯进口返回json格式,返回的是一个HTML页面. 并且有些参数是隐藏在html里面的,需要先从html页面中取出隐藏参数,如:csrfmidd ...

  6. linux (08) nginx入门详解

    一. nginx 入门 nginx 入门学习 web服务器软件 windows IIS服务器 linux nginx apache 收费​lighthttp 公司的技术栈 收费版技术栈 apache ...

  7. 【转】Spring全家桶

    Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶.它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflo ...

  8. k8s进入指定pod下的指定容器的命令

    访问某pod的某个容器: kubectl --namespace=default exec -it user-deployment-54469dd57-vg87g --container user - ...

  9. django的几个常见命令、request请求取值形式、数据库连接、

    django基础知识薄弱点 几个常见的命令 #创建django项目 django-admin startproject mysite #启动django项目 python manage.py runs ...

  10. USACO Stamps

    洛谷 P2725 邮票 Stamps https://www.luogu.org/problem/P2725 JDOJ 1797: Stamps 邮票 https://neooj.com:8082/o ...