練習 - 使用內建中介軟體

已完成

ASP.NET Core 包含一組內建的中介軟體元件,這些元件可處理路由傳送、驗證和 HTTP 記錄等常見工作。 您可以使用這些元件來為應用程式新增功能,而不必撰寫自訂的中介軟體。

小組負責人請您建立公司的裸機網站。 該網站應該在主頁面上顯示歡迎訊息,並在個別的 /about 頁面上顯示公司簡史。 舊版應用程式的公司歷史位於 /history URL,因此您必須將要求從 /history 重新導向至 /about,以便與現有連結保持相容。

您將使用內建的 MapGet 方法和 UrlRewriter 中介軟體來完成這些工作。

建立 ASP.NET Core 應用程式

您需要 ASP.NET Core 應用程式來扮演小組應用程式的角色。 讓我們在 Visual Studio Code 中使用 C# 開發套件延伸模組建立新的 ASP.NET Core 應用程式。

  1. 啟動 Visual Studio Code。

  2. Ctrl+Shift+P 以開啟命令選擇區。

  3. 搜尋並選取 [.NET:新增專案...]。

  4. 搜尋並選取 [ASP.NET Core Empty]

    已選取 [ASP.NET Core Empty] 之命令選擇區的螢幕擷取畫面。

  5. 選取或建立新專案的資料夾。

  6. 將新的應用程式命名為「MyWebApp」

  7. 選取 [建立專案] 以建立專案。

  8. 當新專案開啟時,展開 [Solution Explorer] 窗格以檢視專案檔。

執行應用程式

測試應用程式以確定其可執行。

  1. 在 Visual Studio Code 中,按 F5 建置並執行應用程式。

    1. 出現提示時,選取 [C#] 作為偵錯工具。
    2. 出現提示時,選取 [C#: MyWebApp [預設設定]] 作為要使用的啟動設定。

    此命令會啟動應用程式,並將其裝載在本機網頁伺服器上。 瀏覽器視窗隨即開啟並顯示「Hello, World!」

  2. 在 Visual Studio Code 中按 Shift+F5 以關閉瀏覽器視窗並停止應用程式。

對應端點並新增 URL 重寫器

現在您已擁有可正常運作的應用程式了,接下來讓我們在主頁面中新增歡迎訊息。

  1. 開啟 Program.cs 檔案。

  2. app.MapGet("/", () => "Hello World!"); 行上,將「Hello World!」訊息變更為「Welcome to Contoso!」

    app.MapGet("/", () => "Welcome to Contoso!");
    

    app.MapGet() 會將 HTTP GET 要求對應至指定的路徑。 ASP.NET Core 的這項功能稱為 端點路由。 此程式碼會在管線中新增分支。 如果要求路徑為 /,則端點路由中介軟體會將要求路由傳送至此端點,然後將「Welcome to Contoso!」寫入到回應中。

  3. 在下一行上,新增下列程式碼:

    app.MapGet("/about", () => "Contoso was founded in 2000.");
    

    此程式碼會新增另一個端點。 如果要求路徑為 /about,此端點會將「Our company was founded in 2000.」寫入到回應中。

  4. 在第一個 app.MapGet(),新增下列程式碼:

    app.UseRewriter(new RewriteOptions().AddRedirect("history", "about"));
    

    此程式碼會新增 URL 重寫器中介軟體元件,以將要求從 /history 重新導向至 /aboutAddRedirect() 方法採用兩個參數:用來比對要求路徑的規則運算式模式,以及要作為重新導向目的地的取代路徑。

  5. 將下列指示詞新增至檔案的頂端:

    using Microsoft.AspNetCore.Rewrite;
    

    這個指示詞會解析 RewriteOptions 類別的參考。

測試變更

  1. 儲存所有變更,並和之前一樣地執行應用程式。
  2. 當瀏覽器視窗開啟時,請注意根 URL 會顯示「歡迎使用 Contoso!將 新增 /about 至 URL,然後按 Enter。 瀏覽器應該會顯示「Contoso was founded in 2000.」
  3. 將 URL 中的 /about 替換為 /history,然後按 Enter 鍵。 瀏覽器應該會重新導向至 /about
  4. 讓應用程式保持執行以便進行下一個練習。