asp.net mvc 中 一種簡單的 URL 重寫

来源:http://www.cnblogs.com/ben121011/archive/2016/11/20/6082650.html
-Advertisement-
Play Games

asp.net mvc 中 一種簡單的 URL 重寫 Intro 在項目中想增加一個公告的功能,但是又不想直接用預設帶的那種路由,感覺好low逼,想弄成那種偽靜態化的路由 (別問我為什麼不直接靜態化,當時就是只想做成偽靜態化以後可能會做成完全靜態化),至於為什麼做偽靜態化或靜態化可以自行百度或參考本 ...


asp.net mvc 中 一種簡單的 URL 重寫

Intro

在項目中想增加一個公告的功能,但是又不想直接用預設帶的那種路由,感覺好low逼,想弄成那種偽靜態化的路由 (別問我為什麼不直接靜態化,當時就是只想做成偽靜態化以後可能會做成完全靜態化),至於為什麼做偽靜態化或靜態化可以自行百度或參考本文最後 Q&A 部分。

How to do

Step0 註冊路由

在註冊預設路由前添加自己的重寫路由,如下所示的 “Notice routes” 所示,第一個參數是 路由名稱,請保持在整個Web應用中唯一,第二個參數是 url,提供一個你想要重寫的 url 模板,模板參數放在 “{” 和 “}”之間, 第三個參數是設置是重寫指向的 controller 和 action(有時只指定 controller,看重寫需求),namespace指定需要處理的 controller 所在命名空間,當只有一個區域時可以不寫,多個區域的時候最好顯式指定對應的命名空間,防止路由衝突。

【註:新增的路由必須放在預設路由前面,不然不會有效果】

 1     public static void RegisterRoutes(RouteCollection routes)
 2     {
 3         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4         //notice route
 5         routes.MapRoute("Notice", "Notice/{path}", new { controller = "Home", action = "NoticeDetails" }, namespaces: new string[] { "ActivityReservation.Controllers" });
 6         //default route
 7         routes.MapRoute(
 8             name: "Default",
 9             url: "{controller}/{action}/{id}",
10             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
11             namespaces: new string[] { "ActivityReservation.Controllers" },
12             constraints:new { id = @"\d*"}
13         );
14     }

 

Step1 編寫控制器處理代碼

在上一步註冊路由的過程中,我們指定了處理的 controller(和 action ),接下來就需要在 controller 中處理請求了。

controller 中處理代碼示例如下:

 1         /// <summary>
 2         /// 公告詳情
 3         /// </summary>
 4         /// <param name="path">訪問路徑</param>
 5         /// <returns></returns>
 6         public ActionResult NoticeDetails(string path)
 7         {
 8             if (String.IsNullOrEmpty(path))
 9             {
10                 return RedirectToAction("Notice");
11             }
12             try
13             {
14                 var notice = new Business.BLLNotice().GetOne(n => n.NoticePath == path);
15                 if (notice != null)
16                 {
17                     return View(notice);
18                 }
19                 else
20                 {
21                     return RedirectToAction("Notice");
22                 }
23             }
24             catch (Exception ex)
25             {
26                 logger.Error(ex);
27                 throw;
28             }
29         }

 

在定義路由的時候,定義了一個模板參數“path”,在處理的 action 中直接作為方法的參數處理就可以嘍

Step2 調試代碼,看重寫效果

如果可以出現如下圖所示的頁面,那麼恭喜你,今天的 url 重寫完成了。

Q&A

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

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

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

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

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

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

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

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

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

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

End

本文主要講解瞭如何簡單的做一個 mvc 中的 url 重寫,實現了一個通知公告的偽靜態化功能(以後可能會修改為完全靜態化)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題 如何控制 OData 路由 解決方案 為了註冊路由,可以使用 HttpConfigurationExtension 類中 MapODataServiceRoute 的擴展方法。對於單一路由這樣做足以,其餘的處理由實體數據模型來處理。 從 ASP.NET Web API 2.2 開始支持 ODa ...
  • 我們看看各個web框架的性能,以TPS為指標排序(每秒返回的response多的在前面,性能越好),所有測試都在Linux中運行。在對比中,我們看到ASP.NET Core取得優異的成績,具體6個回合的對比請移步TechEmpower查看 ...
  • 怎樣使用 async & await 一步步將同步代碼轉換為非同步編程 【博主】反骨仔 【出處】http://www.cnblogs.com/liqingwen/p/6079707.html 序 上次,博主通過《利用 async & await 的非同步編程》一文介紹了 async & await 的基 ...
  • 在工業領域也有極端的情況出現,早些年做通訊的時候,數據包頭、包尾、數據長度、數據校驗位都對,但是就是解析出來的數據不正確,這種情況不會經常出現,但是在某種特殊應用環境可能會頻繁出現,後來經過分析得出結論:可能是由於地質電磁干擾引起的。但是也有技術上的設計缺陷,例如:數據校驗位是累加和,改成CRC是不... ...
  • Visual Studio for Mac離線下載安裝。 環境:OS X EI Caption 10.11.2 .NET Core SDK 1.1 需預先安裝 .NET Core 1.1 SDK macOS版下載地址:https://go.microsoft.com/fwlink/?LinkID=8 ...
  • 前面幾篇重點都在講普通列表的相關操作,本篇主要講樹型列表的操作,詳情如下:... ...
  • 1、字母大小寫處理 2、字母與ASCII的互換 在Web開發時,ASCII的作用!(American Standard Code for Information Interchange,美國信息交換標準代碼) 舉個例子:' 單引號在sql語句中是個殺手,但是如果把(')它轉換成 "&#" + ASC ...
  • 利用 async & await 進行非同步 IO 操作 可以使用非同步函數訪問文件。使用非同步功能,可以調用非同步方法,而不使用回調或拆分您在多個方法或 lambda 表達式中的代碼。 若要使同步代碼非同步,則調用非同步方法而不是一個同步方法並添加幾個關鍵字到代碼中。 對文件操作使用非同步特性: 非同步特性有利於 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...