2022/10/20

[.NET6] ASP.NET Core MVC 如何設定 routing 小寫英數字串的 URL

前言

在 ASP.NET MVC 或是 ASP.NET Core MVC 預設的 Route 會自動指定 Controller 及 Action 名稱的路徑,因為我們都是用大寫英文,而自動生成的路徑也都是以大寫顯示,雖然在路徑上直接打小寫的也是可以連到指定的路徑,但是在網站生成的連結都是大寫來顯示。

原本在 ASP.NET MVC 我要特定指定小寫的做法會是在 RouteConfig 設定 routes.MapMvcAttributeRoutes() 並且在 Controller 指定 RoutePrefix 及 Route 屬性。

然而今天在查詢資料時才發現原來有更簡單的方法,而且很久很久以前就支援了。

雖然手邊目前執行的專案是 ASP.NET MVC,筆記就一併記錄目前最新的版本 ASP.NET Core MVC (.NET6)。

ASP.NET MVC

修改 App_Start/RouteConfig.cs

在所有的 routes 設定之前加上

routes.LowercaseUrls = true;

居然這麼簡單就設定完成了,完全不用再打開 Controller 一一指定。這個方法適用於不需特殊指定名稱,僅是把預設路徑皆改變為小寫。

方法二:指定 Route attribute

這個明確的指定方法是可以更客製化,哪天路徑名稱想改是可以把名稱任意改變的,例如加上 v1 或 v2

routes.MapMvcAttributeRoutes()

以 HomeController 為範例,直接指定小寫的字串 (/Home/Privacy 變成 /home/privacy)

[RoutePrefix("home")]
public class HomeController : Controller
{
    [Route("privacy")]
    public ActionResult Privacy()
    {
        return View();
    }
}

ASP.NET Core MVC (.NET6)

修改 Program.cs,在

// 記得在 app build 之前加入此設定,把 LowercaseUrls 設為 true
builder.Services.Configure<routeoptions>(options =&gt;
{
   options.LowercaseUrls = true;
});


var app = builder.Build();

而 Route 指定則是直接在 Controller 的 Action 上明確指定

以下範例路徑即會將預設的 /home/privacy 變為 /home/test

public class HomeController : Controller
{
    [Route("home/test")]
    public ActionResult Privacy()
    {
        return View();
    }
}

參考資料

2022/10/04

[Ubuntu] 解決在 Ubuntu 22.04 設定網路固定 IP 遇到的問題

前言

大部分接觸客戶的主機都是已經在完善的環境下操作,很少需要設定到跟硬體有關的部分

今日剛好遠端執行遇到,特地記錄一下

主機環境

  • Hyper-V
  • Ubuntu 22.04

主機是在 Hyper-V 下執行安裝 Ubuntu 22.04 的 VM

問題

準備遠端操作時被告知主機網路設定不正確,而在過程中遇到的主要錯誤問題有兩項

  1. eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP>
  2. blk_update_request:I/O error,dev fd0,sector0

解決方法

第一個 eth0 NO-CARRIER

因為是第一次在僅文字介面下實際設定網路,對這個錯誤訊息很陌生,但它是一個重要訊息關鍵字,查詢後得知它是因為跟實體網路為斷線狀態,告知網管後,立即排除網路連線問題

第二個 blk_update_request:I/O error,dev fd0,sector0

在套用網路設定,這個錯誤訊息一直出現,原來是因為 Hyper-V 會自動開啟軟碟機 (Floppy) 的驅動

執行 sudo rmmod floppy 就可以排除這個錯誤訊息

操作指令

查詢網卡及 IP 資訊

$ ip a

其中列出例如 eth0 的名稱, 此名稱為設定檔案時會需要用到的網卡名稱

設定固定 IP

$ sudo vi /etc/netplan/00-installer-config.yaml

在此放上範例檔案: (/usr/share/doc/netplan/examples/static.yaml)

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 10.10.10.2/24
      nameservers:
        search: [mydomain, otherdomain]
        addresses: [10.10.10.1, 1.1.1.1]
      routes:
        - to: default
          via: 10.10.10.1

註: 另外 Ubuntu 22.04 的設定把 gateway4 設定棄用了 (錯誤訊息: gateway4 has been deprecated, use default routes instead), 要改用 routes

套用網路設定

在套用之前也可以用 netplan try 有 120 秒的後悔時間

$ sudo netplan apply