.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面 高访问量类型的电子商务网站需要将一些不是经常变化的页面生成静态页面然后普通用户就可以直接访问这些静态页面而不用再访问需要连接数据库的动态页面。那么ASP.NET MVC3中如何做到这一点呢要解决这个问题我们需要先了解ASP.NET应用程序的生命周期先看下面作者整理的一张图片从图中我们可以清楚的看到通用IIS访问应用程序时每次的单个页面URL访问时都会先经过HttpApplication 管线处理请求走过BeginRequest 事件之后才会去走路由访问具体的Controller和Action,最后结束的时候会请求EndRequest事件。下面用一张图来表示这个顺序注意图中标示的红色部分就是我们要实现的部分,实现如下:1 新建MyHandler.cspublic class MyHandler:IHttpModule { public void Init(HttpApplication application) { application.BeginRequest (new EventHandler(this.Application_BeginRequest)); application.EndRequest (new EventHandler(this.Application_EndRequest)); } private void Application_BeginRequest(Object source, EventArgs e) { // Create HttpApplication and HttpContext objects to access // request and response properties. HttpApplication application (HttpApplication)source; HttpContext context application.Context; string filePath context.Request.FilePath; string fileExtension VirtualPathUtility.GetExtension(filePath); if (fileExtension.Equals(.html)) { context.Response.WriteFile(context.Server.MapPath(filePath));//直接走静态页面//此处可以加入缓存条件也可以根据需要来自己定义context.Response.End(); } } private void Application_EndRequest(Object source, EventArgs e) { HttpApplication application (HttpApplication)source; HttpContext context application.Context; string filePath context.Request.FilePath; string fileExtension VirtualPathUtility.GetExtension(filePath); if (fileExtension.Equals(.html)) { context.Response.Write(hrh1font colorred HelloWorldModule: End of Request/font/h1); } } public void Dispose() { } }2. web.config中加入以下代码才会运行自定义的管道处理类1: httpModules2: add nameMvcTest.MyHandler typeMvcTest.MyHandler/3: /httpModules运行一下自己的代码看看效果你就全明白了补充根据小尾鱼的提示如果直接在自己的项目文件下生产了和URL中一样的目录文件比如访问yourdomin.com/product/1.html,你的项目文件夹下真的存在product/1.html这个路径那么IIS会直接去请求这个静态页面如果项目中使用了自定义的管道处理程序那么这个静态页仍然会走我们的自定义管道处理程序我们可以在这里通过缓存来实现要不要重新成长静态页或删除过期产品的静态页如果不使用此方法只能去写执行计划定时跑这些静态文件了修改Application_BeginRequest1: private void Application_BeginRequest(Object source,2: EventArgs e)3: {4: // Create HttpApplication and HttpContext objects to access5: // request and response properties.6: HttpApplication application (HttpApplication)source;7: HttpContext context application.Context;8: string filePath context.Request.FilePath;9: string fileExtension 10: VirtualPathUtility.GetExtension(filePath);11: if (fileExtension.Equals(.html))12: {13: //判断缓存是否存在不存在加入缓存调用生成静态的类和方法14: //产品过期移除静态文件302重定向15: if (System.IO.File.Exists(context.Server.MapPath(filePath)))16: {17: context.Response.WriteFile(context.Server.MapPath(filePath));18: context.Response.End();

相关新闻

最新新闻

GameAssist AI游戏助手:3大核心技术揭秘,让你的游戏体验全面升级

GameAssist AI游戏助手:3大核心技术揭秘,让你的游戏体验全面升级

GameAssist AI游戏助手:3大核心技术揭秘,让你的游戏体验全面升级 【免费下载链接】AIAssist GameAssist是一个AI游戏助手,结合OpenCv、OpenCvSharp4、ssd_mobilenet_v3等技术,对游戏对象进行识别,支持自动瞄准/自动开枪…

2026/7/4 2:59:28
大模型Function Calling可靠性工程:从协议到生产的稳定性设计

大模型Function Calling可靠性工程:从协议到生产的稳定性设计

Function Calling(函数调用)是大模型连接外部世界的关键能力。它让模型不仅能生成文本,还能根据用户意图调用 API、查询数据库、控制设备。然而,从实验室 Demo 到生产环境,Function Calling 的可靠性问题远比想象中复杂…

2026/7/4 2:59:28
[对比评测]SendTomo和LocalSend哪个更适合文件传输

[对比评测]SendTomo和LocalSend哪个更适合文件传输

综合来看,两款工具各有明确的适用场景,没有绝对的优劣,你可以根据自身的使用条件选择更适配的工具。一、LocalSend 核心特点与适用场景LocalSend 是一款开源的跨平台局域网文件传输工具,核心优势是完全离线、隐私性极强。 它支持 …

2026/7/4 2:59:28
大部分针对Javascript最合理的方法归纳。

大部分针对Javascript最合理的方法归纳。

原始类型:我们可以直接使用值。 ο  string ο  number ο  boolean ο  null ο  undefined var foo 1,bar foo;bar 9;console.log(foo, bar); // > 1, 9 • 复合类型:我们通过引用对值进行间接访问。 ο  object ο  array ο …

2026/7/4 2:59:28
HarmonyOS 端侧应用实战:中式美食如何把资源、路由、存储和视频拆菜串成一条工程链路

HarmonyOS 端侧应用实战:中式美食如何把资源、路由、存储和视频拆菜串成一条工程链路

做一个菜谱类应用,表面看是页面和列表,往深一点看,其实是一个很典型的端侧软件工程问题。 中式美食这个项目里,有首页推荐、菜品列表、菜品详情、收藏笔记、最近浏览、视频拆菜、个人厨房这些页面。每个页面单独写出来并不难&…

2026/7/4 2:59:28
AI数据助手:从文档问答到智能数据分析

AI数据助手:从文档问答到智能数据分析

AI数据助手:从文档问答到智能数据分析 前面 9 篇我们把 RAG 问答系统从零搭到了生产级。但一个真正的"AI 数据助手",不能只会翻文档回答问题。它应该能帮你做数据分析、生成报表、甚至从一堆数据里挖出你不知道的信息。 今天这篇,我…

2026/7/4 2:54:27

周新闻

月新闻