2022/12/27

[VS2022] 如何更新 IIS Express 開發憑證

前言

繼上回更新 ASP.NET Core 的開發憑證,恰巧 IIS Express 的本機開發憑證也到期了。今天就來解決如何更新 IIS Express 的開發憑證。

問題

今天在 Visual Studio 2022 執行 ASP.NET MVC 的網站時,出現 "根據驗證程序,遠端憑證是無效的。" 的錯誤訊息。檢查後發現原先本機的開發憑證已經到期了。

API 呼叫遠端憑證無效這件事,程式端也是有對應的解決方式,但是在不改程式的狀況下,啟用 https 網站的開發模式一定還是會遇到,先治本吧!

2022/12/18

[.NET] 更新信任 ASP.NET Core 開發憑證

前言

每年都要更新 ASP.NET Core 本機端自簽的開發憑證,剛好就在不久前憑證過期。透過剛結束的 .NET Conf Taiwan 2022 從保哥那裡學到一招更新方法。立即現學現賣。

過期的憑證

寫部落格的同時恰巧經歷了正常到過期的憑證變化。

$ dotnet dev-certs https --check --trust

原本的 A valid certificate was found 變成 The following certificates were found, but none of them is trsuted.


> 我的開發環境: Windows 10,若是其他的平台可以查詢 Microsoft Learn - 使用 .NET CLI 產生自我簽署憑證

更新步驟

  1. 先清掉舊的憑竳
$ dotnet dev-certs https --clean
  1. 再重新建立新憑證
$ dotnet dev-certs https --trust

見證更新過程

正常 -> 過期 -> 清除 -> 重建 -> 正常


相關資料

2022/12/11

[C#] 如何修正錯誤 CS1738 "named argument specifications must appear after all fixed arguments have been specified" 問題

問題

最近遇到客戶拿到原始碼在編譯過程出現 "CS1738 named argument specifications must appear after all fixed arguments have been specified" 錯誤

中文錯誤訊息 "CS1738 必須在所在固定引數皆已指定之後,具名引數規格才可出現。請使用語言版本 7.2 或更高的版本,以允許非後置的具名引數。"

  • 開發環境: 使用 VS2022
  • 客戶環境: 使用 VS2017

相同的程式,在 VS2022 下編譯沒有問題,而在 VS2017 卻遇到無法正確編譯。

程式大致如下:

context.MapRoute(
  name: "MyRouteName",
  url: "MyArea/News/{type}",
  new { controller = "News", action = "TypeList" }
);

解決方法

  1. 依照參數位置給予對應值, 不加任何具名引數 (把具名引數 name:url: 都拿掉)
  2. 把所有具名引數都加上去, 即第三個參數前須加上具名引數 defaults:
  3. 更新 Visual Studio 到新版本 (需支援 C# 7.2 以上的版本)

相關連結

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

2022/04/11

[Linux] 如何在 Ubuntu 20.04 升級 PHP 8.1

前言

PHP 7.4 即將於 2022/11/28 停止安全性支援,而 PHP 8.0 也即將於 2022/11/26 EOL (End of life),也就是今年底遲早勢必要將主機的 PHP 版本升級至 PHP 8.1。

Server 環境及版本

  • Ubuntu 20.04.4
  • PHP 7.4.3
  • Apache 2.4.41

2022/03/23

[滲透測試] 修正 Windows Server 不安全的傳輸協定

問題

客戶網站的滲透測試報告,其中一項弱點為 不安全的傳輸協定或套件

弱點描述:DES (Data Encryption Standard) 加密金鑰過短可被暴力破解,DES 已被高階加密標準 AES 取代。

2022/03/22

[滲透測試] 修正 IIS 目錄列舉弱點問題

問題

近期收到客戶傳來的滲透測試報告,其中一項弱點為 IIS 目錄列舉

弱點描述:Microsoft IIS 中的部分版本可以利用特殊手法對 Windows 8.3 短文件名規範的檔案或目錄進行猜測。

2022/03/21

[PHP] 如何在 VS Code 使用 php-cs-fixer 自動修正 coding style 格式

因應 PSR-12: Extended Coding Style,讓 VS Code 來幫忙自動修正程式碼風格

環境

  • PHP 8.0.15
  • Composer 2.2.6
  • friendsofphp/php-cs-fixer v3.6.0

php-cs-fixer

Composer 全域安裝

composer global require friendsofphp/php-cs-fixer

其他安裝方式: PHP-CS-Fixer 安裝文件

2022/03/09

[IIS] 設定支援 .webp 格式的 MIME

環境

  • IIS 8
  • ASP.NET MVC 5

最近在處理 webp 的圖片格式,ASP.NET MVC 5 的專案在 IIS 上並不認得 webp 的格式
而在 ASP.NET Core 的專案上並沒有發生此問題,特別記錄一下