取消Chrome-based瀏覽器自動將HTTP重導向HTTPS
公司最近在內部網站開始導入使用 HTTPS,伺服器僅匯入憑證,但還不到強制使用的階段。但在測試過程發現一點點麻煩的地方,情境與網路上的有所不同。一般碰到是開發者進行開發時會用到 localhost
這個網域,而瀏覽器因為加強安全性,因此會強制進行 HTTP 重導向 HTTPS 的動作。這個動作稱為 HSTS(HTTP Strict Transport Security)。
公司最近在內部網站開始導入使用 HTTPS,伺服器僅匯入憑證,但還不到強制使用的階段。但在測試過程發現一點點麻煩的地方,情境與網路上的有所不同。一般碰到是開發者進行開發時會用到 localhost
這個網域,而瀏覽器因為加強安全性,因此會強制進行 HTTP 重導向 HTTPS 的動作。這個動作稱為 HSTS(HTTP Strict Transport Security)。
教學上,我一直認為沒有爛問題。只有懂與不懂。實務問題都是好問題。
原始問題是,他想要對一個簡單型別進行取值的動作,我們快速打造出第一版原型ASP.NET Core Web API程式碼:
教學上,我一直認為沒有爛問題。只有懂與不懂。
平常我們在課程上設計的範例為求簡單好懂,通常都會盡量簡化。但回去之後的實務問題,在我眼裡都非常有價值。API 的開發可以很簡單,也可以很複雜,例如,只是單純從後端資料庫取資料,資料表與Model的對應關係通常都是一對一(1:1)的,輸出入也很單純只會有一層,除非你導入了如 Entity Framework 之類 ORM,產生了一對多(1:n)或多對多(n:n)的情境。
{
"filter":{
"name":"bruce",
"currentPage":1,
"pageSize":5
}
}
以同學提問的情況,感覺比較像 Front-End First(或稱 JSON First),也就是 JSON 規格是由前端定義。我們一步一步來解決。
口罩API系列(一)(二)(三)就資料面而言,已經處理的差不多了,不過,專案還有改善的空間。
以關注點分離來看,目前的 MaskController
工作有點雜且職責不夠單一。第一個問題,如果從 EF Core 下手,可能是實作 SeedData 方式來解決,但比較麻煩的事情是資料來源是網路上,而且資料內容不固定。第二點比較麻煩。正在構思時,剛好好友 Demo 貼文說 dotblogs 改版採用 Hangfire 來處理排程事件。疑,Hangfire 不就是這個需求的最佳解嗎!
「使用Hangfire處理ASP.NET MVC/Web API長時間與排程工作」多年前已經用的非常開心。這次讓我們在 ASP.NET Core Web API 來整合 Hangfire 來解決我們碰到的問題。
前篇,我們展示使用 ASP.NET Core Web API 來快速提供口罩剩餘數量查詢API,但這個展示專案有二個較大缺點,我們持續來改進它。
我們會先處理第二點,這裡我選擇利用 EF Core 整 SQLite 來當暫存資料的儲存點,因為原始資料約 6000 筆上下,這樣的處理量 SQLite 非常合適,而且它的特色是帶著就走且免費,發行部署也相當方便。在未超過更新間隔時前,就由 SQLite 裡去取資料,以減輕資料源的壓力。在處理第二點時,會隨便處理第一點,在取回政府資料開放平臺的口罩剩餘數量資料並儲存前,我們利用 Model 裡的一點小技巧來轉換資料源到英文欄位,並以英文欄位來輸出。
以下利用一個ASP.NET Core Web API範例來說明如何在ASP.NET Core撰寫一支去串接政府資料開放平臺的口罩剩餘數量,並提供為API讓人家使用。
資料來源:健保特約機構口罩剩餘數量明細清單
在測試一段非同步程碼時,發現一個 ASP.NET Core 裡 Route 有趣現象。平常為了測試方便,習慣會修改預設路由規則,例如將
ASP.NET Core Web API Route("api/[controller]")
改為 Route("ControllerName/[action]")
。
我們先在本機進行 Redis for Windows 的 Master-Slave-Sentinel 架構測試。由於微軟官方已經不再繼續維護 Redis for Windows,目前還有一位 tporadowski fork 後持繼在更新與維護。讓我們謝謝他。
ASP.NET Core 本身跨平台特性,使得他非常合適活在 Docker Container 裡。這裡試著把一個 github 專案先匯入 VSTS,然後在 VSTS Build 的 CI 服務進行 build image 和 pull image 的動作,pull image 我們採用 Microsoft Azure 的 Container Registry 服務來當私有庫。有了 image 之後,在使 VSTS Release 的 CD 服務將 image 送到 Web App for Container 去進行執行動作。
VS / VS Code <--> VSTS git <--> Build / Pull Image <--> ACR <--> Release <--> > Web App for Container <--> User
同事詢問一個靈異的狀況。美國同事的電腦,不論如何測試就是無法登入最近採用 ASP.NET Core + Razor Pages 開發的一個新服務網站。此網站使用預設 [Authorize]
來驗證,後端沒有什麼太深的程式碼,就是驗證帳密通過設定驗證 HTTP Cookie。
一開始的方向還在通想會不會是 ASP.NET Core 本身有雷,這個技術還很新,不敢說我們的掌握度還很好,可是想想可能性非常的低,這個 [Authorize]
的發展從 ASP.NET MVC 到 ASP.NET Core 應該算成熟的應用。反覆測試,發現一奇特現像。
你是否有過邊看 MSDN Library 文件,不時浮現一個「x」字,心想:「這是在寫什麼鬼?」(台語)的疑問。
.NET 開發人員,你一定讀過 MSDN Library,早些年,MSDN Library 可說是 .NET 開發人員最好的朋友。但近年來,大量的機器翻譯,讓 MSDN Library 品質直線下降。其實,各位所提交的建議,原有一群義工人士,是"真"人工審核。後來不為何,義工人士不斷消失。小弟有幸加入這個消失中的義工團,就我而言,審核分專業和非專業,我不可能專精整個 MSDN Library 技術,在審核非專業內容時需要大量的時間。由於下班後時間有限,只能慢慢放低義工時間,最後,好像能瞭解,機器人造成大量的品質不良,要靠少數幾個人來改善是有難度的。
目前微軟新版文件庫叫 Microsoft Docs,這一個以開源為導向的文件庫,所有文件內容都開源開放在 Github 上,目前繁體中文化正在火熱進行中(但目前還有很大比例,你點擊後還是看到英文內容),既然開源開放,那麼只要你有心,人人都能成為Microsoft Docs繁體中文貢獻者。目前有二種途徑可以參與:
在 ASP.NET Core 的 Views (Razor) 提供了一個新的 Tag Helpers,Tag Helpers 有別於 ASP.NET MVC 的 Html Helpers。在 Visual Studio 2017 可以新增「ASP.NET Core Web Application (.NET Core)」或「ASP.NET Core Web Application (.NET Framework)」專案:
我們開啟 Views/About.cshtml 貼上以下程式碼:
<form asp-controller="Movies" asp-action="Index" method="get">
<p>
Title: <input type="text" name="search" />
<input type="submit" value="Filter" />
</p>
</form>
可以看到 asp-*
的 Tag Helpers 會被解析為正常的 HTML 內容。但如果是手刻程式嗎呢?
可以看到,不論是直接輸入 asp-
或修改舊的程式碼,Visual Studio 2017 不會有任何 IntelliSense 提示。這...
如果你有跟著 ASP.NET Core (1)(2) 篇練習的話,會發現開發上有那麼些許的不方便,就是我們要不斷中斷dotnet程序,重覆dotnet build
、dotnet run
的流程。我們希望後端的 C# 也能像前端擁有 LiveReload 或 React Hot Loader 的功能,在 Visual Studio 我們介紹過 Reload 來解決此一問題,而在.NET Core dotnet watch
套件可以實現自動編譯的工作。
前篇:使用ASP.NET Core建立Web API服務,我們使用 VS Code 來開發了一個.NET Core(ASP.NET Core) 的 Web API 服務,接著我們要把開發好的服務發行至Microsoft Azure來執行。和前篇相同,如果是使用 Visual Studio 那麼發行動作只在點選之間就完成了,不過這篇,我們依然是不採用 Visual Studio 來實作,還是使用 VS Code 與指令來完成。
在 VS Code 切換至 git 圖示,點擊"初始化 git 儲存機制"並且在訊息輸入第一次簽入的資訊。
.NET Core(ASP.NET Core)與之前的 ASP.NET MVC / ASP.NET Web API 兩套不同的 Framework 不同,ASP.NET Core 中的 MVC 整合了 Web API,現在要建立 API 或 Web 都將更為簡單,因為整合後的 ASP.NET Core MVC 基於相同的程式碼與管線(pipeline)。
ASP.NET Core 的跨平台特性,使用開發工具與開發環境的選擇相當多元。
.NET Core SDK 安裝:
安裝頁面有各平台(Windows, Linux, Mac, Docker)的安裝指南,照步驟安裝即可。
開發工具方面:
使用 Windows 的開發者,地表最強的 Visual Studio 當然是最好的選擇,如果使用 MAC(Windows) 那 VS Code + C# 擴充套件後也不差。如果 Visual Studio 2015 Update 3 並安裝了最新的 .NET Core Tooling Preview 2 for Visual Studio 2015 ,那麼已包含 .NET Core SDK 的安裝。
如果 VS Code + C# 擴充套件,使用起來不是很順(例如,IntelliSense、提示加 using 等),看一下 OmniSharp Log (檢視 → 切換輸出)是否正常。重開幾次 VS Code 看看。
測試工具:
兩套測試工具都行,挑喜歡的用即可。
範本工具:
安裝指令:
npm install -g yo
npm install -g generator-aspnet
這是延伸自 yeoman 的範本產生器,在不使用 Visual Studio 的情況下,它會很有幫助。
以下範例,讓我們使用 VS Code 來走一次建立 ASP.NET Core - Web API 的過程。相同的過程,使用 Visual Studio 的體驗與以前沒有太大差異,更重要的是,使用 VS Code 可以讓我們更瞭解 .NET Core 運作流程(因為要下指令),所以選擇使用指令與 VS Code 來進行實作。