亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:28:09
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了ASP.NET實現偽靜態網頁方法小結,主要包括了利用Httphandler實現URL重寫、地址重寫、利用Mircosoft URLRewriter.dll實現頁面偽靜態等,需要的朋友可以參考下
本文實例總結了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程序設計有一定的借鑒價值。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色另类天堂2015| 亚洲欧洲一区二区三区久久| 亚洲精品ady| 国产一区二区三区三区在线观看| 欧洲精品久久久| 亚洲视频国产视频| 黄网站色欧美视频| 国产精品69久久| 国产精品欧美在线| 揄拍成人国产精品视频| 久久久影视精品| 日韩亚洲在线观看| 午夜精品一区二区三区av| 性欧美xxxx交| 午夜免费日韩视频| 中文精品99久久国产香蕉| 国产经典一区二区| 欧美成人黄色小视频| 日本免费一区二区三区视频观看| 亚洲最新视频在线| 欧美激情女人20p| 国产精品一区专区欧美日韩| 国产日本欧美一区二区三区| 欧美交受高潮1| 日本精品视频在线| 91亚洲国产成人精品性色| 欧美日韩国产精品一区二区三区四区| 欧美成人精品在线播放| 成人亚洲激情网| 欧美亚洲日本黄色| 狠狠久久五月精品中文字幕| 欧美国产日韩免费| 欧美电影在线免费观看网站| 欧美电影免费观看网站| 日韩在线观看免费高清完整版| 97视频在线观看免费高清完整版在线观看| 亚洲专区在线视频| 98视频在线噜噜噜国产| 一本色道久久88综合日韩精品| 国产欧美精品一区二区三区-老狼| 国产一区深夜福利| 欧美华人在线视频| 亚洲精品网站在线播放gif| 国产成人91久久精品| 亚洲欧美国产高清va在线播| 国产xxx69麻豆国语对白| 成人性生交大片免费看视频直播| 精品无人区太爽高潮在线播放| 久久中文字幕在线视频| 中文字幕亚洲在线| 日韩成人av网址| 亚洲精品电影网| 中文字幕日韩视频| 亚洲女性裸体视频| 国产精品亚发布| 亚洲视频网站在线观看| 亚洲性夜色噜噜噜7777| 亚洲直播在线一区| 色婷婷综合成人| 亚洲美女性生活视频| 欧美视频免费在线观看| 欧美日韩国产综合新一区| 国产精品丝袜高跟| 在线观看国产成人av片| 国产成人精品电影久久久| 亚洲欧美日韩视频一区| 久久久久成人网| 国产综合久久久久| 久久影院资源站| 亚洲最新视频在线| 欧美怡红院视频一区二区三区| 亚洲伊人一本大道中文字幕| 国产精品免费小视频| 欧美精品一本久久男人的天堂| 亚洲无亚洲人成网站77777| 91色在线视频| 亚洲免费中文字幕| 大伊人狠狠躁夜夜躁av一区| 成人免费自拍视频| 欧美性视频网站| 精品中文字幕视频| 久久人人爽人人爽人人片av高清| 亚洲女人天堂成人av在线| 欧美激情精品久久久久久久变态| 国产精品极品尤物在线观看| 一本大道久久加勒比香蕉| 亚洲最大成人在线| 亚洲图片在线综合| 国产日本欧美一区二区三区在线| 国产午夜精品全部视频在线播放| 国产一区二区三区直播精品电影| 国产成人精品久久亚洲高清不卡| 欧美电影免费观看大全| 久久亚洲一区二区三区四区五区高| 欧美日韩综合视频网址| 欧美理论在线观看| 亚洲乱码国产乱码精品精天堂| 久久久午夜视频| 日韩在线观看av| 亚洲成人激情小说| 成人免费福利在线| 亚洲欧美日韩视频一区| 欧美疯狂性受xxxxx另类| 日韩精品在线观看一区| 综合av色偷偷网| 国产精品久久在线观看| 久久久中文字幕| 中文字幕欧美日韩在线| 久久久精品2019中文字幕神马| 久久97久久97精品免视看| 日韩av大片在线| 亚洲欧美在线一区| 国产国语videosex另类| 国产精品国产三级国产专播精品人| 欧美另类交人妖| 91视频国产一区| 午夜美女久久久久爽久久| 亚洲欧美精品suv| 欧美午夜久久久| 欧美与黑人午夜性猛交久久久| 日韩av中文在线| 欧美理论在线观看| 日韩精品中文在线观看| 国产亚洲精品久久| 亚洲精品中文字| 国产精品一区专区欧美日韩| 欧美大成色www永久网站婷| 亚洲国产欧美在线成人app| 日韩免费在线看| 亚洲成人久久一区| 欧美日韩成人在线观看| 日韩av免费在线观看| 欧洲美女7788成人免费视频| 欧美日韩亚洲一区二区| 国产性猛交xxxx免费看久久| 欧美日韩国产在线播放| 性色av一区二区三区免费| 另类色图亚洲色图| 91网在线免费观看| 国产一区二区三区精品久久久| 91欧美精品午夜性色福利在线| 欧美激情极品视频| 91免费视频网站| 成人免费在线视频网址| 亚洲美女视频网| 久久中国妇女中文字幕| 亚洲精品电影久久久| 成人免费看黄网站| 亚洲人成自拍网站| 亚洲成人精品在线| 国产亚洲精品高潮| 国产亚洲欧美日韩美女| 亚洲毛片一区二区| 亚洲精品www| 国产亚洲欧洲高清一区| 久久国产精品久久久久久| 97视频在线观看免费| 日韩欧亚中文在线| 在线视频欧美性高潮| 成人精品视频在线| 亚洲人成网站999久久久综合| 日韩精品一区二区三区第95| 韩剧1988在线观看免费完整版| 日韩欧美极品在线观看|