一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

ASP.NET實現偽靜態網頁方法小結

本文實例總結了ASP.NET實現偽靜態網頁方法,分享給大家供大家參考之用。具體方法如下:

方法一:利用Httphandler實現URL重寫(偽URL及偽靜態)

我們有時候會見到這樣的地址:“http://www.XXXX.com/show-12-34.html”,你或許認為在站點服務器根目錄“/”下存在名為“show-12-34.html”的文件,其實實際它可能是不存在的,而可能你看到的內容是“/ASPx/show.ASPx?type= 12&id=34”的內容,為什么要這樣做呢?原因有多個方面:首先是增強URL的友好性,記“show-12-34.html”總比 “/ASPx/show.ASPx?type=12&id=34”好記吧?其次就是方便搜索引擎收錄,很多搜索引擎更看好靜態HTML頁,比如:百度;其次就是出于安全性的考慮,因為這樣隱藏了參數“type”、“id”。是不是很有意思呢?

其實這是利用URL重寫實現的,下面我就說一下在ASP.NET2.0下我所知道的最簡單的實現方法:通過實現接口“IHttpHandler”來接管HTTP請求,Follow me!

1.在資源管理方案中添加一個類,類的代碼如下:

//類URLRewriter程序清單: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; /// <summary> /// UrlRewriter URL重寫類  /// Author:yoyo /// </summary> public class UrlRewriter : IHttpHandler //實現“IHttpHandler”接口 {  public UrlRewriter() { // // TODO: 在此處添加構造函數邏輯  // } public void ProcessRequest(HttpContext Context) { try { //取得原始URL屏蔽掉參數 string Url = Context.Request.RawUrl; //建立正則表達式   System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex   (@"/show-(/d+)-(/d+)/..+",System.Text.RegularExpressions.RegexOptions.IgnoreCase); //用正則表達式進行匹配 System.Text.RegularExpressions.Match m = Reg.Match(Url,Url.LastIndexOf("/"));//從最后一個“/”開始匹配 if (m.Success)//匹配成功 { String RealPath = @"~/ASPx/show.ASPx?type=" + m.Groups[1] + "&id=" + m.Groups[2]; //Context.Response.Write(RealPath); //Context.RewritePath(RealPath);//(RewritePath 用在無 Cookie 會話狀態中。) Context.Server.Execute(RealPath); } else  { Context.Response.Redirect(Context.Request.Url.ToString()); } } catch { Context.Response.Redirect(Context.Request.Url.ToString()); } } /// <summary> /// 實現“IHttpHandler”接口所必須的成員 /// </summary> /// <value></value> /// Author:yoyo public bool IsReusable { get { return false; } }}

2.在web.config文件還要添加以下設置項

在<system.web>節點下添加如下代碼:

<httpHandlers> 
<add verb="*" path="*/show-?*-?*.ASPx" type="UrlRewriter" /> 
</httpHandlers>

解釋一下:

verb是指允許的動作“GET”、“POST”、“PUT”中的一種或幾種,星號“*”表示全部允許;

path是指匹配路徑,支持簡單的通配符;

type是指綁定的類名以及包括命名空間(如果有的話);

對了,首先你要建立一個WEB窗體“show.ASPx”在目錄“ASPx”下,因為這個文件就是實際接受請求并顯示相關內容的頁面。

OK!,編譯,打開網站輸入地址http://localhost:80/show-12-34.ASPx 訪問一下,檢查看是不是顯示的“/ASPx/show.ASPx?type=12&id=34”的內容呢?!

上面我是設置了匹配ASPX文件,因為IIS里.HTML擴展名默認是不歸ASP.NET接管的,如果要接管HTML請求,
請將IIS的擴展名.HTML映射到“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ASPNET_isapi.dll”,
然后將上面的ASPx改成html:

<httpHandlers> 
<add verb="*" path="*/show-?*-?*.html" type="UrlRewriter" /> 
</httpHandlers>

現在打開網站輸入地址http://localhost:80/show-12-34.html 訪問一下~!

方法二:地址重寫、使用偽靜態、頁面回發處理

制作網站頁面的時候,有時候為了用戶的體驗和搜索引擎的收錄,很多網站經常使用偽靜態地址重寫,或者稱為 URL地址重寫的辦法,來將諸如:MyEbook.ASPx?ID=1,MyEbook.ASPx?ID=2MyEbook.ASPx?ID=3等帶有參 數的動態頁面偽裝成為一個靜態頁面,比如,將以上的偽裝成為My1.html,My2.html,My3.html等等諸如此類!

出發點是很好的,不僅有利于用戶體驗,也有利于收錄,實在是一舉兩得!

好處已講,現在來談談使用這種辦法所存在的毛病,問題就在于,當你使用偽靜態技術的頁面有按鈕,需要提交內容時,這個時候,一旦與服務器之間有回發動作, 那么,地址欄里面顯示的網頁地址就不再是偽裝出來的My1.html,My2.html,My3.html等等拉,而是變為MyEbook.ASPx? ID=1,MyEbook.ASPx?ID=2MyEbook.ASPx?ID=3等等洛,如此一來,會讓不太懂網頁制作的網友感到不安,他們會認為自己 在上一個騙子網站,認為自己提交的數據都被另外一個網站給偷走了,總之,給他們的感覺就是,這樣的網站具有欺騙性質;很可能,以后他們再也不敢上你的網站 了!!!………

下面本人就個人解決如上問題的心得體會做如下說明,希望能夠幫助廣大網友解決問題!

解決如上問題,有很多種辦法,有使用Javascript禁止回發,有將頁面的

改為等等多種方法,反正能改的地方,都有人使用過了,并且,這樣的文章比較多,但是難以實現,就本人脾氣而已,更喜歡直接了當的辦法,盡量少改地方,免得日后出錯麻煩;

第一步:打開你的網站下面,新建一個類,文件名稱大體如此:MyActionlessform.cs

第二步:該類的代碼如下:

using System; using System.IO; using System.Web; using System.Web.UI; namespace MyURL {   public class MyOLPage : Page   {     public MyOLPage()     { }     protected override void Render(HtmlTextWriter writer)     {       if (writer is System.Web.UI.Html32TextWriter)       {         writer = new FormFixerHtml32TextWriter(writer.InnerWriter);       }       else       {         writer = new FormFixerHtmlTextWriter(writer.InnerWriter);       }       base.Render(writer);     }   }    internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter   {     private string _url; // 偽裝的URL     internal FormFixerHtml32TextWriter(TextWriter writer)       : base(writer)     {       _url = HttpContext.Current.Request.RawUrl;     }     public override void WriteAttribute(string name, string value, bool encode)     {       if (_url != null && string.Compare(name, "action", true) == 0)       {         value = _url;       }       base.WriteAttribute(name, value, encode);     }   }   internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter   {     private string _url;     internal FormFixerHtmlTextWriter(TextWriter writer)       : base(writer)     {       _url = HttpContext.Current.Request.RawUrl;     }     public override void WriteAttribute(string name, string value, bool encode)     {       if (_url != null && string.Compare(name, "action", true) == 0)       {         value = _url;       }       base.WriteAttribute(name, value, encode);     }   } } 

之后,將這個類文件編譯成為MyActionlessform.dll文件,并在網站的項目中引用他,

第三步:打開具有回發操作的頁面,將其中的:System.Web.UI.Page更改為: MyURL.MyOLPage,如此而已,一勞永逸了,以后不再擔心回發暴露真實地址嚇走網友拉!

至此,大功可成一半多一點,接下來問題又來了,什么問題呢,你運行一下你的網站,是不是出現如下錯誤呀!

CS0433: 類型“MyURL.MyOLPage”同時存在于“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/ Temporary ASP.NET Files/schoolit/3266aab1/aca2fc74/App_Code.2-69spm5.dll”和“c:/WINDOWS/ Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/schoolit/3266aab1/aca2fc74/assembly/dl3/4d107fc6/00b753fe_ea19c801/ MyActionlessform.DLL”中

大體就是這樣的錯誤了,針對這樣的錯誤,有很多解決辦法,有的地方說,刪除臨時使用的文件夾,刪除某個命名 空間等等操作,俺都試過了,但是百試不得其果,后來俺就自己想想,出現這樣的錯誤無非就是兩個文件同時存在,但是又不能重復使用,解決辦法那還不簡單,停 用一個,只使用一個就行了嘛

上面的,我們不是建立了一個MyActionlessform.cs了嗎,它存在App_Code這個文件夾里面,另外一個是 MyActionlessform.dll,兩個文件內容完全一樣,做好了,我們就不需要MyActionlessform.cs了,我們只需要 MyActionlessform.dll,那么,想方設法將前者弄走不就得了(本人建議將此文件排除項目,不提倡直接刪除該文件,因為以后可能使用 到),本人做法是,在項目中直接排出MyActionlessform.cs文件,經過測試,大功至此已結束!!!!

方法三:利用Mircosoft URLRewriter.dll實現頁面偽靜態

昨天,轉貼了一篇利用ISAPI篩選器來實現URL偽靜態的文章,我按照文章上的內容做,可是沒有做出來,目前看來,該方法沒有使用Microsoft URLRewriter.dll這個方法好,至少我個人覺得,花了一個晚上的時間,終于研究出來了怎么利用這個dll文件來對ASP.NET頁面實現靜態 化了,其實很簡單。
一、獲得Mircosoft URLRewriter.dll
獲得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/library/webservices/ASP.NET/URLRewriting.mspx?mfr=true
這里,選擇[下載本文的源代碼],下載完畢后,導入工程,我這里沒有對該工程做任何修改,保留了原來的重寫方式,然后直接在VS2005里面生成.dll文件就可以了。
二、使用該dll文件

添加引用,搞定。

三、頁面方面的設計,這里不在贅述了,我會放一個下載包,有興趣的朋友下載來看看吧,代碼寫的比較亂。

四、web.config的配置
這部是非常關鍵的,也是靜態化能否成功的關鍵。

<?xml version="1.0"?> <configuration>  <configSections>   <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />  </configSections>   <RewriterConfig>     <Rules>       <RewriterRule>         <LookFor>~/web/new/type/(.[0-9]*)/.html</LookFor>     <SendTo>~/web/new.ASPx?id=$1</SendTo>       </RewriterRule>    <RewriterRule>     <LookFor>~/web/index.html</LookFor>     <SendTo>~/web/index.ASPx</SendTo>    </RewriterRule>     </Rules>   </RewriterConfig>   <system.web>   <httpHandlers>    <add verb="*" path="*.ASPx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />    <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />   </httpHandlers>     <compilation debug="true"/></system.web> </configuration> 

這里簡單介紹一下:

<RewriterConfig>   <Rules>   <RewriterRule>    <LookFor>要查找的模式</LookFor>    <SendTo>要用來替換模式的字符串</SendTo>   </RewriterRule>   <RewriterRule>    <LookFor>要查找的模式</LookFor>    <SendTo>要用來替換模式的字符串</SendTo>   </RewriterRule>   </Rules> </RewriterConfig> 

httpHandlers的設置主要是配合IIS將請求重新定義處理,這里也比較關鍵,如果不存在合理的httpHandlers,那么,訪問肯定會失敗的。

關于正則表達式,可以到百度里搜索:"常用正則表達式",會有很多。

五.配置IIS解析.html文件

右鍵點我的電腦-->管理-->展開'服務和應用程序'-->interNET信息服務-->找到你共享的目錄-->右鍵 點擊屬性 -->點擊'配置'-->映射下面 -->找到.ASPx的可執行文件路徑 復制路徑-->粘貼路徑-->擴展名為".html"-->然后把檢查文件是否存在的勾去掉這樣就可以了,如果遇到“確定”按鈕失效, 可以用鍵盤事件編輯路徑即可解決。

本文實例代碼點此本站下載。

相信本文所述對大家的ASP.NET程序設計有一定的借鑒價值。

AspNet技術ASP.NET實現偽靜態網頁方法小結,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: www.av在线播放 | 午夜激情小视频 | 999成人精品视频在线 | 国产精品午夜高清在线观看 | 亚洲精品福利视频 | 男女视频免费网站 | 欧美xx在线观看 | 草草草视频 | 精品一区二区三区在线观看l | 五月婷婷深爱五月 | 午夜视频久久 | 亚洲国产高清视频 | 国产成人在线视频网站 | 好吊妞视频在线观看 | 亚洲福利视频一区二区 | 一级毛毛片毛片毛片毛片在线看 | 激情综合丝袜美女一区二区 | 又黄又爽又猛大片录像 | 日韩精品视频一区二区三区 | 黄色美女免费网站 | 精品视频网 | 丁香婷婷在线 | 免费看美女扒开腿让男人桶 | 五月天色婷婷综合 | 国产在线激情视频 | 日本欧美强乱视频在线 | 国产91对白在线播放 | 欧美不卡影院 | 91视频青娱乐 | 色鬼网站| 狠狠色做五月深爱婷婷 | 一区一区三区产品乱码 | 久久精品国产2020观看福利色 | 在线视频免费国产成人 | 色综合一区二区三区 | 2021免费日韩视频网 | 亚洲伊人色 | 一区二区三区高清视频在线观看 | 欧美一区二区三区视频 | 好吊色欧美一区二区三区四区 | 黄色小视频免费 |