ASP.NET Core 2 學習筆記(八)URL重寫

来源:https://www.cnblogs.com/snaildev/archive/2018/05/29/9103801.html
-Advertisement-
Play Games

路由跟URL 重寫的功能性略有不同。路由是將Request 找到對應的服務,而URL 重寫是為了推卸責任轉送Request。本篇將簡單介紹下ASP.NET Core的URL重寫(URL Rewrite)。 URL Rewrite 註冊 URL Rewriting Middleware需要Micros ...


路由跟URL 重寫的功能性略有不同。路由是將Request 找到對應的服務,而URL 重寫是為了推卸責任轉送Request。
本篇將簡單介紹下ASP.NET Core的URL重寫(URL Rewrite)。

URL Rewrite 註冊

URL Rewriting Middleware需要Microsoft.AspNetCore.Rewrite套件。
ASP.NET Core 2.0以上版本,預設是參考Microsoft.AspNetCore.All,已經包含Microsoft.AspNetCore.Rewrite,所以不用再安裝。

要使用URL重寫,在Startup.csConfigureIApplicationBuilder使用UseRewriter方法註冊URL Rewriting Middleware:

Startup.cs

// ...
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        var rewrite = new RewriteOptions()
            .AddRewrite("about.aspx", "home/about", skipRemainingRules: true)
            .AddRedirect("first", "home/index");
        app.UseRewriter(rewrite);
        // ...
    }
}

通過RewriteOptions建立URL重寫規則後,傳入給URL Rewriting Middleware。

URL重寫規則,主要有分兩種方式:

  • URL重寫(URL Rewrite)
    上例的AddRewrite就是URL重寫。
  • URL轉址(URL Redirect)
    上例的AddRedirect就是URL轉址。

URL 重寫

URL 重寫是屬於Server 端的轉換事件,當Client 端Request 來的時候,發現原網址已經被換掉了,就會自動回傳新網址的內容。情境如下:

上例AddRewrite有用到三個參數,當URL符合參數1時,就將參數2路由的內容回傳給Client。
參數3是用來加速URL匹配的參數,類似switch的break。若將skipRemainingRules設為true,當找到匹配條件,就不再繼續往下找符合其他參數1的規則。

  • 參數1支持正則表達式(Regular Expressions)。

範例結果:

 

URL 轉址

URL 轉址是屬於Client 端的轉換事件,當Client 端Request 來的時候,發現原網址已經被換掉了,Server 會先回傳給Client 告知新網址,再由Client 重新Request 新網址。情境如下:

AddRedirect的使用方式類似AddRewrite,當URL符合參數1時,就會回傳參數2的URL給Client。

  • 參數1同樣支持正則表達式(Regular Expressions)。

URL轉址預設都是回傳HTTP Status Code 302,也可以在參數3指定回傳的HTTP Status Code。
通常轉址的HTTP Status Code都是用301或302 ,URL轉址對“人”的行為來說沒有什麼意義,反正就是幫忙從A轉到B;主要差異是給“搜索引擎”理解的。

Startup.cs

// ...
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        var rewrite = new RewriteOptions()
            .AddRedirect("first", "home/index", 301);
        app.UseRewriter(rewrite);
        // ...
    }
}
  • HTTP Status Code 301 

301是要讓搜索引擎知道,該網址已經永久轉移到另一個地方。通常用於網站搬家或網站改版,新舊版本路徑不相同,要重新對應的情況。

範例結果:

 

  • HTTP Status Code 302 

302是告知搜索引擎,雖然這次被轉址,但只是暫時性的。通常用於網站維護時,暫時原網址轉移到別的地方,如維護公告頁面。
範例結果:

   

正則表達式

AddRewriteAddRedirect都支持正則表達式的使用,且能把來源的URL通過正則表達式變成參數,帶入新URL。

Startup.cs

// ...
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        var rewrite = new RewriteOptions()
            .AddRedirect(@"products.aspx?id=(\w+)", "prosucts/$1", 301)
            .AddRedirect(@"api/(.*)/(.*)/(.*)", "api?p1=$1&p2=$2&p3=$3", 301);
        app.UseRewriter(rewrite);
        // ...
    }
}
  • 當連到http://localhost:5000/products.aspx?id=p123
    轉址到http://localhost:5000/products/p123
  • 當連到http://localhost:5000/api/first/second/third
    轉址到http://localhost:5000/api?p1=first&p2=second&p3=third

通過正則表達式做URL 轉址,對於網站新舊改版來說,非常好用。

參考

URL Rewriting Middleware in ASP.NET Core

 

老司機發車啦:https://github.com/SnailDev/SnailDev.NETCore2Learning


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

-Advertisement-
Play Games
更多相關文章
  • 在對python有了一定的瞭解之後就對python的第三方庫產生了十分濃厚的興趣,因為python的很多功能都是要依靠第三方庫函數來實現的,而且在電腦二級剛剛加入的python考試中也有對第三方庫的安裝和運用有一定的要求,比如Turtle庫、jieba庫、pyinstaller庫、wordclou ...
  • 索引 NET Core應用框架之BitAdminCore框架應用篇系列 框架演示:http://bit.bitdao.cn 框架源碼:https://github.com/chenyinxin/cookiecutter-bitadmin-core 一、列定義 本節講解如何定義querySuite要顯 ...
  • 在Revit中有一個相機功能可以以相機視角產生一個視圖。一開始我在2016中找關鍵詞Camera,但是沒什麼收穫。 其實這個相機功能的真正核心是創建透視視圖:View3D.CreatePerspective(Document, ElementId) 簡單的代碼示例如下: 關於上方向: Autodes ...
  • 話不多說,直接代碼 ...
  • 原理就是,先從梁的LocationCurve上取點,然後向板的上錶面投影。如果有投影點,再從投影點(板上)向梁的底面投影,這時候如果有投影點的話就能得到距離了。 運用該分析的第一條件是梁是在板的上方,勿忘哈! LocationCurve的延伸: 在Curve上按PointRange選取點位: 獲取距 ...
  • 添加 父節點,併為父節點添加子節點 移除選中節點(父/子都可以移除) 為節點添加圖標(父/子都可以添加) ...
  • src直接寫入api地址,filename是對應伺服器視頻存儲的地址。 後臺對應代碼 ...
  • 轉發請註明出處:https://home.cnblogs.com/u/zhiyong-ITNote/ 整個Demo是基於Controller-Service-Repository架構設計的,每一層之間是通過介面來實現解耦與調用的,參照了《ASP.NETMVC5框架揭秘》一書最後的網站示例架構,使用U ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...