国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 01:45:22
字體:
來源:轉載
供稿:網友

asp.net 實現偽靜態網頁方法

方法一:利用Httphandler實現URL重寫(偽URL及偽靜態)我們有時候會見到這樣的地址:“http://www.huoho.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.在資源管理方案中添加一個類,類的代碼如下:

[csharp]view plaincopy
  1. //類URLRewriter程序清單:
  2. usingSystem;
  3. usingSystem.Data;
  4. usingSystem.Configuration;
  5. usingSystem.Web;
  6. usingSystem.Web.Security;
  7. usingSystem.Web.UI;
  8. usingSystem.Web.UI.WebControls;
  9. usingSystem.Web.UI.WebControls.WebParts;
  10. usingSystem.Web.UI.HtmlControls;
  11. ///<summary>
  12. ///UrlRewriterURL重寫類
  13. ///Author:yoyo
  14. ///blog:http://yangmingsheng.cn
  15. ///</summary>
  16. publicclassUrlRewriter:IHttpHandler//實現“IHttpHandler”接口
  17. {
  18. publicUrlRewriter()
  19. {
  20. //
  21. //TODO:在此處添加構造函數邏輯
  22. //
  23. }
  24. publicvoidPRocessRequest(HttpContextContext)
  25. {
  26. try
  27. {
  28. //取得原始URL屏蔽掉參數
  29. stringUrl=Context.Request.RawUrl;
  30. //建立正則表達式
  31. System.Text.RegularExpressions.RegexReg=newSystem.Text.RegularExpressions.Regex
  32. (@"/show-(/d+)-(/d+)/..+",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  33. //用正則表達式進行匹配
  34. System.Text.RegularExpressions.Matchm=
  35. Reg.Match(Url,Url.LastIndexOf("/"));//從最后一個“/”開始匹配
  36. if(m.Success)//匹配成功
  37. {
  38. StringRealPath=
  39. @"~/aspx/show.aspx?type="+m.Groups[1]+"&id="+m.Groups[2];
  40. //Context.Response.Write(RealPath);
  41. //Context.RewritePath(RealPath);//(RewritePath用在無Cookie會話狀態中。)
  42. Context.Server.Execute(RealPath);
  43. }
  44. else
  45. {
  46. Context.Response.Redirect(Context.Request.Url.ToString());
  47. }
  48. }
  49. catch
  50. {
  51. Context.Response.Redirect(Context.Request.Url.ToString());
  52. }
  53. }
  54. ///<summary>
  55. ///實現“IHttpHandler”接口所必須的成員
  56. ///</summary>
  57. ///<value></value>
  58. ///Author:yoyo
  59. ///blog:http://yangmingsheng.cn
  60. publicboolIsReusable
  61. {
  62. get{returnfalse;}
  63. }
  64. }

2.在web.config文件還要添加一下設置項在<system.web>節點下添加如下代碼:

[csharp]view plaincopy
  1. <httpHandlers>
  2. <addverb="*"path="*/show-?*-?*.aspx"type="UrlRewriter"/>
  3. </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:

[csharp]view plaincopy
  1. <httpHandlers>
  2. <addverb="*"path="*/show-?*-?*.html"type="UrlRewriter"/>
  3. </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等等洛,如此一來,會讓不太懂網頁制作的網友感到不安,他們會認為自己 在上一個騙子網站,認為自己提交的數據都被另外一個網站給偷走了,總之,給他們的感覺就是,這樣的網站具有欺騙性質;很可能,以后他們再也不敢上你的網站 了!!!&hellip;……

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

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

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

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

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

[csharp]view plaincopy
  1. usingSystem;
  2. usingSystem.IO;
  3. usingSystem.Web;
  4. usingSystem.Web.UI;
  5. namespaceMyURL
  6. {
  7. publicclassMyOLPage:Page
  8. {
  9. publicMyOLPage()
  10. {}
  11. protectedoverridevoidRender(HtmlTextWriterwriter)
  12. {
  13. if(writerisSystem.Web.UI.Html32TextWriter)
  14. {
  15. writer=newFormFixerHtml32TextWriter(writer.InnerWriter);
  16. }
  17. else
  18. {
  19. writer=newFormFixerHtmlTextWriter(writer.InnerWriter);
  20. }
  21. base.Render(writer);
  22. }
  23. }
  24. internalclassFormFixerHtml32TextWriter:System.Web.UI.Html32TextWriter
  25. {
  26. privatestring_url;//偽裝的URL
  27. internalFormFixerHtml32TextWriter(TextWriterwriter)
  28. :base(writer)
  29. {
  30. _url=HttpContext.Current.Request.RawUrl;
  31. }
  32. publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
  33. {
  34. if(_url!=null&&string.Compare(name,"action",true)==0)
  35. {
  36. value=_url;
  37. }
  38. base.WriteAttribute(name,value,encode);
  39. }
  40. }
  41. internalclassFormFixerHtmlTextWriter:System.Web.UI.HtmlTextWriter
  42. {
  43. privatestring_url;
  44. internalFormFixerHtmlTextWriter(TextWriterwriter)
  45. :base(writer)
  46. {
  47. _url=HttpContext.Current.Request.RawUrl;
  48. }
  49. publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
  50. {
  51. if(_url!=null&&string.Compare(name,"action",true)==0)
  52. {
  53. value=_url;
  54. }
  55. base.WriteAttribute(name,value,encode);
  56. }
  57. }
  58. }

之后,將這個類文件編譯成為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偽靜態的文

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耿马| 阿拉尔市| 新平| 桐城市| 库车县| 商洛市| 大荔县| 芒康县| 贵南县| 望都县| 高碑店市| 卓尼县| 肥东县| 睢宁县| 股票| 星子县| 沙坪坝区| 南皮县| 南平市| 苍山县| 衢州市| 壶关县| 阿克陶县| 楚雄市| 桂东县| 娄烦县| 兰西县| 潼南县| 泌阳县| 澳门| 临泉县| 长乐市| 曲沃县| 新干县| 通河县| 蕲春县| 葫芦岛市| 定边县| 长治县| 介休市| 高碑店市|