主頁(yè) > 知識(shí)庫(kù) > ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問(wèn)靜態(tài)頁(yè)面

ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問(wèn)靜態(tài)頁(yè)面

熱門(mén)標(biāo)簽:山西防封卡電銷(xiāo)卡套餐 上海楊浦怎么申請(qǐng)申請(qǐng)400電話 地圖標(biāo)注多個(gè)行程 海外地圖標(biāo)注門(mén)市標(biāo) 云南外呼電銷(xiāo)機(jī)器人系統(tǒng) 浙江外呼系統(tǒng)怎么安裝 廈門(mén)商鋪地圖標(biāo)注 陜西人工外呼系統(tǒng)哪家好 銅川小型外呼系統(tǒng)運(yùn)營(yíng)商

要解決這個(gè)問(wèn)題,我們需要先了解ASP.NET應(yīng)用程序的生命周期,先看下面作者整理的一張圖片:

ASP.NET生命周期 (2)

從圖中我們可以清楚的看到:通用IIS訪問(wèn)應(yīng)用程序時(shí),每次的單個(gè)頁(yè)面URL訪問(wèn)時(shí),都會(huì)先經(jīng)過(guò)HttpApplication 管線處理請(qǐng)求,走過(guò)BeginRequest 事件之后才會(huì)去走路由訪問(wèn)具體的Controller和Action,最后結(jié)束的時(shí)候會(huì)請(qǐng)求EndRequest事件。下面用一張圖來(lái)表示這個(gè)順序:

image

注意圖中標(biāo)示的紅色部分就是我們要實(shí)現(xiàn)的部分,實(shí)現(xiàn)如下:
1 新建MyHandler.cs

復(fù)制代碼 代碼如下:

public 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));//直接走靜態(tài)頁(yè)面
//此處可以加入緩存,條件也可以根據(jù)需要來(lái)自己定義
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("hr>h1>font color=red>" +
"HelloWorldModule: End of Request/font>/h1>");
}
}
public void Dispose() { }
}

2. web.config中加入以下代碼,才會(huì)運(yùn)行自定義的管道處理類(lèi)
復(fù)制代碼 代碼如下:

httpModules>
add name="MvcTest.MyHandler" type="MvcTest.MyHandler"/>
/httpModules>

運(yùn)行一下自己的代碼,看看效果你就全明白了!
補(bǔ)充:根據(jù)@小尾魚(yú)的提示,如果直接在自己的項(xiàng)目文件下生產(chǎn)了和URL中一樣的目錄文件,比如訪問(wèn):yourdomin.com/product/1.html,你的項(xiàng)目文件夾下真的存在product/1.html這個(gè)路徑,那么IIS會(huì)直接去請(qǐng)求這個(gè)靜態(tài)頁(yè)面,如果項(xiàng)目中使用了自定義的管道處理程序,那么這個(gè)靜態(tài)頁(yè)仍然會(huì)走我們的自定義管道處理程序,我們可以在這里通過(guò)緩存來(lái)實(shí)現(xiàn)要不要重新成長(zhǎng)靜態(tài)頁(yè)或刪除過(guò)期產(chǎn)品的靜態(tài)頁(yè),如果不使用此方法,只能去寫(xiě)執(zhí)行計(jì)劃,定時(shí)跑這些靜態(tài)文件了,修改Application_BeginRequest
復(fù)制代碼 代碼如下:

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"))
{
//判斷緩存是否存在,不存在加入緩存,調(diào)用生成靜態(tài)的類(lèi)和方法
//產(chǎn)品過(guò)期,移除靜態(tài)文件,302重定向
if (System.IO.File.Exists(context.Server.MapPath(filePath)))
{
context.Response.WriteFile(context.Server.MapPath(filePath));
context.Response.End();
}
}

思路大體如此。

您可能感興趣的文章:
  • Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼
  • asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法
  • 使用asp.net MVC4中的Bundle遇到的問(wèn)題及解決辦法分享
  • asp.net MVC實(shí)現(xiàn)無(wú)組件上傳圖片實(shí)例介紹
  • ASP.NET MVC中為DropDownListFor設(shè)置選中項(xiàng)的方法
  • ASP.NET MVC 5使用X.PagedList.Mvc進(jìn)行分頁(yè)教程(PagedList.Mvc)
  • 基于Asp.Net MVC4 Bundle捆綁壓縮技術(shù)的介紹
  • ASP.NET MVC使用EasyUI的datagrid多選提交保存教程
  • Asp.net MVC scheduler的實(shí)現(xiàn)方法詳解

標(biāo)簽:自貢 孝感 許昌 常州 朔州 西雙版納 萊蕪 信陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問(wèn)靜態(tài)頁(yè)面》,本文關(guān)鍵詞  ASP.NET,MVC3,關(guān)于,生成,純,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問(wèn)靜態(tài)頁(yè)面》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于ASP.NET MVC3關(guān)于生成純靜態(tài)后如何不再走路由直接訪問(wèn)靜態(tài)頁(yè)面的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章