在我的活動室預約項目中,有一個公告模塊,類似于新聞發布,個人感覺像新聞這種網頁基本就是發布的時候編輯一次之后就再也不會改了,最適合靜態化了," />

aspnetcore 實現簡單的偽靜態化功能

 更新時間:2019-09-08 20:01:51   作者:佚名   我要評論(0)

Intro
在我的活動室預約項目中,有一個公告模塊,類似于新聞發布,個人感覺像新聞這種網頁基本就是發布的時候編輯一次之后就再也不會改了,最適合靜態化了,

Intro

在我的活動室預約項目中,有一個公告模塊,類似于新聞發布,個人感覺像新聞這種網頁基本就是發布的時候編輯一次之后就再也不會改了,最適合靜態化了, 靜態化之后用戶請求的就是靜態文件基本不再需要服務器端查詢數據庫甚至服務器端渲染,可以一定程度上提升服務器的處理能力以及優化用戶體驗,而且這種靜態化的url對 SEO 比較友好。

由于我的這個項目正在開發中,遷移起來不太方便,所以使用的是偽靜態化,看上去是訪問的 *.html,實際上并不是 html,而是需要服務器處理的。

GetStarted

配置路由信息,注意順序,偽靜態的路由要在默認路由之前

app.UseMvc(routes =>
{
  routes.MapRoute("Notice", "/Notice/{path}.html", new
  {
    controller = "Home",
    action = "NoticeDetails"
  });

  routes.MapRoute(name: "areaRoute",
    template: "{area:exists}/{controller=Home}/{action=Index}");

  routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}");
});

控制器代碼:

/// <summary>
/// 公告詳情
/// </summary>
/// <param name="path">訪問路徑</param>
/// <returns></returns>
public async Task<ActionResult> NoticeDetails(string path)
{
  if (string.IsNullOrWhiteSpace(path))
  {
    return RedirectToAction("Notice");
  }
  try
  {
    var noticeBll = HttpContext.RequestServices.GetService<IBLLNotice>();
    var notice = await noticeBll.FetchAsync(n => n.NoticeCustomPath == path.Trim());
    if (notice != null)
    {
      notice.NoticeVisitCount += 1;
      await noticeBll.UpdateAsync(notice, x => x.NoticeVisitCount);

      return View(notice);
    }
    else
    {
      return RedirectToAction("Notice");
    }
  }
  catch (Exception ex)
  {
    Logger.Error(ex);
    throw;
  }
}

實際效果:

https://reservation.weihanli.xyz/Notice/test-notice.html

notice details

Q&A

Q:為什么我們要做(偽)靜態化?

A:站點下的 *.html 文件有利于網站的 SEO 優化,有利于百度和google爬蟲爬你的網站,SEO做的好有利于提高搜索排名【SEO的水也很深、感興趣的可以自己找資料研究】。

Q:什么是偽靜態化?什么是完全靜態化?他們的區別是什么?

A:偽靜態化是針對完全靜態化來說的,(完全)靜態化是會實際保存內容到一個 *.html 文件中,而偽靜態化則是通過服務器端技術通過匹配 url 符合一定的模式就重新交給指定的程序處理并返回內容。

簡單來說,(完全)靜態化會有一個實際存在的靜態文件,偽靜態化則不存在,需要較多服務器端的處理。

Q:偽靜態化和完全靜態化哪個好?

A:這個問題更好的問法應該是這樣的:“什么時候適合用偽靜態化?什么時候適合用完全靜態化?”,一個事物既然存在就必然有它存在的道理,存在即合理,如果沒有存在的意義必將死去。

完全靜態化一般會根據一個模板生成一個實際存在的 *.html 文件,完全靜態化不需要太多的服務器端處理,客戶端請求這個文件時因為是一個靜態文件服務器會直接將文件內容返回給客戶端,不需要額外的服務器處理。
 完全靜態化會減少服務器的壓力。

偽靜態化服務器上并沒有靜態 *.html文件,只是在服務器斷使用了Rewrite,將動態URL進行重寫,使動態URL表現為靜態URL,以滿足網頁URL靜態需求但網頁依然為動態調用的,,是需要很多服務器端處理的,比如url的模式匹配,從數據庫中查詢數據。

總結:雖然完全靜態化URL的網頁有打開速度快的優點,但是網站內容巨大的話,勢必會使網站的體積變大很多,會有很多的靜態化文件,網站遷移的話很麻煩,另一方面如果網站內容很多的時候修改模板的話,再次靜態化的時候會是一個比較大的工作量。實際使用的話還是需要根據自己實際需要來選取。

Reference

• https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation

總結

以上所述是小編給大家介紹的aspnetcore 實現簡單的偽靜態化 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

您可能感興趣的文章:

  • asp.net core mvc實現偽靜態功能
  • asp.net core webapi項目配置全局路由的方法示例
  • Asp.NET Core 如何調用WebService的方法
  • ASP.NET Core跨站登錄重定向的實現新姿勢
  • ASP.NET Core 2.1 使用Docker運行的方法步驟
  • ASP.NET Core與NLog集成的完整步驟
  • ASP.NET Core開發教程之Logging利用NLog寫日志文件
  • 詳解在Windows下如何使用AspNetCore Api 和consul

相關文章

  • python爬蟲 貓眼電影和電影天堂數據csv和mysql存儲過程解析

    python爬蟲 貓眼電影和電影天堂數據csv和mysql存儲過程解析

    字符串常用方法 # 去掉左右空格 'hello world'.strip() # 'hello world' # 按指定字符切割 'hello world'.split(' ') # ['hello','world'] # 替換指定字符
    2019-09-08
  • aspnetcore 實現簡單的偽靜態化功能

    aspnetcore 實現簡單的偽靜態化功能

    Intro 在我的活動室預約項目中,有一個公告模塊,類似于新聞發布,個人感覺像新聞這種網頁基本就是發布的時候編輯一次之后就再也不會改了,最適合靜態化了,
    2019-09-08
  • Python圖像處理模塊ndimage用法實例分析

    Python圖像處理模塊ndimage用法實例分析

    本文實例講述了Python圖像處理模塊ndimage用法。分享給大家供大家參考,具體如下: 一 原始圖像 1 代碼 from scipy import misc from scipy import ndimage
    2019-09-08
  • Django框架 Pagination分頁實現代碼實例

    Django框架 Pagination分頁實現代碼實例

    一、自定義分頁 1、基礎版自定義分頁 data = [] for i in range(1, 302): tmp = {"id": i, "name": "alex-{}".format(i)} data.append(tmp)
    2019-09-08
  • 詳解Python3 pandas.merge用法

    詳解Python3 pandas.merge用法

    摘要 數據分析與建模的時候大部分時間在數據準備上,包括對數據的加載、清理、轉換以及重塑。pandas提供了一組高級的、靈活的、高效的核心函數,能夠輕松的將
    2019-09-08
  • .NET生成水印更好的方法實例代碼

    .NET生成水印更好的方法實例代碼

    前言 眾所周知為了保護知識產權,防止資源被盜用,水印在博客、網店等場景中非常常見。 本文首先演示了基于System.Drawing.Image做正常操作。然后基于Direct2
    2019-09-08
  • Django框架 查詢Extra功能實現解析

    Django框架 查詢Extra功能實現解析

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些情況下,Django的查詢語法難以簡單的表
    2019-09-08
  • Django框架 querySet功能解析

    Django框架 querySet功能解析

    可切片 使用Python 的切片語法來限制查詢集記錄的數目 。它等同于SQL 的LIMIT 和OFFSET 子句。 >>> Entry.objects.all()[:5] # (LIMIT 5) Entry.obje
    2019-09-08
  • Python使用scipy模塊實現一維卷積運算示例

    Python使用scipy模塊實現一維卷積運算示例

    本文實例講述了Python使用scipy模塊實現一維卷積運算。分享給大家供大家參考,具體如下: 一 介紹 signal模塊包含大量濾波函數、B樣條插值算法等等。下面的代
    2019-09-08
  • 基于python全局設置id 自動化測試元素定位過程解析

    基于python全局設置id 自動化測試元素定位過程解析

    背景: 在自動化化測試過程中,不方便準確獲取頁面的元素,或者在重構過程中方法修改造成元素層級改變,因此通過設置id準備定位。 一、python準備工作: 功能
    2019-09-08

最新評論

亿宝娱乐黑钱