最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#網(wǎng)站生成靜態(tài)頁面的實(shí)例講解

 更新時(shí)間:2019年01月22日 15:44:54   作者:chenqiangdage  
今天小編就為大家分享一篇關(guān)于C#網(wǎng)站生成靜態(tài)頁面的實(shí)例講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

在一些需要經(jīng)常更新頁面數(shù)據(jù)的網(wǎng)站中,一般訪問量不是很大的都直接發(fā)布的是帶后臺代碼,每次訪問都是有數(shù)據(jù)庫交互的。但是一旦訪問量增加了,那么這些服務(wù)器開銷變成本就要考慮進(jìn)來了,像一些文章,后臺編輯后,文章內(nèi)容存入數(shù)據(jù)庫,如果1000人訪問,如果還是每次取數(shù)據(jù)庫,那這1000次的io訪問就顯得比較大了,一個(gè)好的方法就是,文章確定之后,做成靜態(tài)頁面,而這個(gè)做的方法由程序來做,就是遞歸遍歷整個(gè)網(wǎng)站,將網(wǎng)站內(nèi)容都訪問一遍,然后生成這些頁面的靜態(tài)文本頁面,在將這些頁面發(fā)布,這樣對瀏覽者而言,他看到的還是同一個(gè)地址,同一份文章,只是這份是靜態(tài)的而言。這樣就提升了網(wǎng)站的效率節(jié)約了資源;

下面附上一份C#遍歷網(wǎng)站內(nèi)容,然后生成內(nèi)容頁面代碼:

private ArrayList htmlCreatedList = new ArrayList();
    /// <summary>
    /// 遞歸實(shí)現(xiàn)頁面靜態(tài)化功能
    /// </summary>
    /// <param name="urlString">要訪問的頁面鏈接地址</param>
    public void SaveHtmlCode(string urlString)
    {
      if (htmlCreatedList.Contains(urlString))
      {
        return;
      }
      string htmlCode = GetHtmlCodeFromUrl(urlString);
      string htmlPath = urlString.ToPhysicalPath();
      string direcHtmlPath = Path.GetDirectoryName(htmlPath);
      if (!Directory.Exists(direcHtmlPath))
      {
        Directory.CreateDirectory(direcHtmlPath);
      }
      File.WriteAllText(htmlPath, htmlCode);
      htmlCreatedList.Add(urlString);
      var urlList = GetUrlLinkFromHtmlCode(htmlCode);
      string urlTemp = string.Empty;
      foreach (string url in urlList)
      {
        urlTemp = url;
        urlTemp = Regex.Replace(urlTemp, "href\\s*=\\s*", "");
        urlTemp = urlTemp.Replace("\"", "");
        urlTemp = urlTemp.Replace("\\", "/");
        urlTemp = WebConfigInfo.UrlPrefix + urlTemp;
        SaveHtmlCode(urlTemp);
      }
    }
    /// <summary>
    /// 通過HttpWebRequest頁面鏈接的html代碼
    /// </summary>
    /// <param name="urlString">頁面鏈接地址</param>
    /// <returns>頁面鏈接對應(yīng)的html代碼</returns>
    private string GetHtmlCodeFromUrl(string urlString)
    {
      HttpWebRequest hwRequest = (HttpWebRequest)WebRequest.Create(urlString);
      hwRequest.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705";
      hwRequest.Accept = "*/*";
      hwRequest.KeepAlive = true;
      hwRequest.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
      HttpWebResponse hwResponse = (HttpWebResponse)hwRequest.GetResponse();
      Stream streamResponse = hwResponse.GetResponseStream();
      StreamReader readerOfStream = new StreamReader(streamResponse, System.Text.Encoding.GetEncoding("utf-8"));
      string strHtml = readerOfStream.ReadToEnd();
      readerOfStream.Close();
      streamResponse.Close();
      hwResponse.Close();
      return strHtml;
    }
    ///<summary>
    ///正則表達(dá)式匹配出html代碼中的超鏈接
    ///</summary>
    ///<param name="htmlCode">要找出超鏈接的html代碼</param>
    ///<returns></returns>
    private IEnumerable<string> GetUrlLinkFromHtmlCode(string htmlCode)
    {
      string strRegex = "href\\s*=\\s*(?:[\"'](?<1>[^\"'.#:]*)[\"'])";
      Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);
      MatchCollection ms = r.Matches(htmlCode);
      IEnumerable<string> listUrl = from Match cc in ms select cc.ToString().Replace("&", "&");
      return listUrl.Distinct();
    }
  }

給string 擴(kuò)展了一個(gè)方法。

public static string ToPhysicalPath(this string urlString)
    {
      System.Uri uri = new System.Uri(urlString);
      string htmlPath = string.Format("{0}\\Html\\{1}\\", System.Web.HttpContext.Current.Request.PhysicalApplicationPath, uri.AbsolutePath);
      string[] querys = uri.Query.Split(new char[] { '?', '&', '=' }, StringSplitOptions.RemoveEmptyEntries);
      htmlPath += string.Join(string.Empty, querys);
      htmlPath += querys.Length.Equals(0) ? "Index.html" : ".html";
      htmlPath = htmlPath.Replace("/", "\\");
      htmlPath = htmlPath.Replace("\\\\", "\\");
      return htmlPath;
    }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • C#簡單實(shí)現(xiàn)IOC容器的示例代碼

    C#簡單實(shí)現(xiàn)IOC容器的示例代碼

    IoC 的原理是通過將對象的創(chuàng)建和依賴關(guān)系的管理交給外部容器來實(shí)現(xiàn),從而降低了代碼的耦合度,提高了代碼的可維護(hù)性和可測試性,下面我們就來看看如何通過C#實(shí)現(xiàn)一個(gè)IOC容器吧
    2024-02-02
  • C# TextBox多行文本框的字?jǐn)?shù)限制問題

    C# TextBox多行文本框的字?jǐn)?shù)限制問題

    最近在使用C# TextBox多行文本框的時(shí)候,發(fā)現(xiàn)了其對字?jǐn)?shù)限制的一點(diǎn)問題,所以總結(jié)下在使用C# TextBox多行文本框要注意的的字?jǐn)?shù)限制問題,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • 教你如何用C#制作文字轉(zhuǎn)換成聲音程序

    教你如何用C#制作文字轉(zhuǎn)換成聲音程序

    近突發(fā)奇想,想玩玩文字轉(zhuǎn)語音的東東,想了下思路,用C#簡單實(shí)現(xiàn)了下,分享給大家,打算下面搞搞語音識別,下次分享給大家
    2014-09-09
  • WPF如何實(shí)現(xiàn)日期范圍選擇器

    WPF如何實(shí)現(xiàn)日期范圍選擇器

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)日期范圍選擇器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C# FileStream實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳

    C# FileStream實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳

    這篇文章主要為大家詳細(xì)介紹了C# FileStream實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C# DataTable常見用法匯總

    C# DataTable常見用法匯總

    這篇文章主要介紹了C# DataTable常見用法,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C#進(jìn)制之間的相互轉(zhuǎn)換詳解

    C#進(jìn)制之間的相互轉(zhuǎn)換詳解

    關(guān)于進(jìn)制之間的相互轉(zhuǎn)換,很多人覺得進(jìn)制較多,所以轉(zhuǎn)換起來比較麻煩,筆者今天在這里說下,進(jìn)制雖然較多,但其實(shí)轉(zhuǎn)換的算法幾近相同
    2013-11-11
  • c#使用EPPlus將圖片流嵌入到Excel實(shí)現(xiàn)示例

    c#使用EPPlus將圖片流嵌入到Excel實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了c#使用EPPlus將圖片流嵌入到Excel實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Unity通過代碼修改按鈕點(diǎn)擊效果

    Unity通過代碼修改按鈕點(diǎn)擊效果

    這篇文章主要為大家詳細(xì)介紹了Unity通過代碼修改按鈕點(diǎn)擊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#正則表達(dá)式匹配與替換字符串功能示例

    C#正則表達(dá)式匹配與替換字符串功能示例

    這篇文章主要介紹了C#正則表達(dá)式匹配與替換字符串功能,結(jié)合具體實(shí)例形式分析了C#字符串正則替換相關(guān)類、方法的使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-06-06

最新評論

陵水| 嘉峪关市| 腾冲县| 广东省| 运城市| 临颍县| 万盛区| 宜良县| 五台县| 通化市| 南昌市| 衡东县| 临澧县| 全州县| 铜梁县| 渝中区| 青河县| 运城市| 延吉市| 宿松县| 巴彦淖尔市| 新竹市| 吴堡县| 什邡市| 厦门市| 高阳县| 噶尔县| 丹棱县| 枝江市| 乾安县| 桃园县| 醴陵市| 丰镇市| 板桥市| 钟祥市| 海林市| 故城县| 涟源市| 富裕县| 措勤县| 丹东市|