發表文章

目前顯示的是有「ASP.NET Core 2」標籤的文章

ASP.NET Core 2 使用 HttpClientFactory 讀取中央氣象局 OpenData 的 API (json格式)

圖片
帳號申請方式可以參考前一篇文章: ASP.NET Core 2 使用 HttpClientFactory 讀取中央氣象局 OpenData 的XML下載→註冊CWB會員 以下稱中央氣象局 OpenData 平台為 CWBODP 這個API服務是提供給APP使用的,畢竟XML格式對行動裝置的運算解讀能力與傳輸資料量都是很傷的(消耗資源),操作起來也不是那麼便利,雖然它(XML)比較嚴謹。 CWODP 取用 API 資料的 URI: https://opendata.cwb.gov.tw/api/v1/rest/datastore/{資料代碼}?Authorization={授權碼} 前面篇章 已經講述過 HttpClientFactory 的用法了,所以這裡我只演示直接處理接收後的資料方式。 首先在 startup.cs 裡面的 ConfigureServices 定義讀取方法(以讀取F-C0032-001資料為例): startup.cs         public void ConfigureServices( IServiceCollection services)         {             services.AddHttpClient( "CWBAPI" , c =>             {                 c.BaseAddress = new Uri ( "https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=CWB-1234ABCD-78EF-GH90-12XY-IJKL12345678" );                 c.DefaultRequestHeaders.Add( "Accept", "*/*" );                 c.DefaultRequestHeaders.Add( "User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firef

ASP.NET Core 2 使用 HttpClientFactory 讀取中央氣象局 OpenData 的XML 下載

圖片
這是使用 ASP.NET Core 2 來讀取 CWB 的開放資料的 XML 檔,並讓 Client 端下載方式 註冊CWB會員 CWB OpenData 平台(以下稱CWBODP)取用資料必須先註冊會員→ 這裡註冊 然後,登入OpenData平台→ 這裡登入 選擇 『資料選擇說明』頁面 ,在下方可以找到『取得授權碼』,這個頁面下有使用教學 要取得資料代碼可以從 『資料清單』頁面 取得需要的代碼 有了上述資訊後,就可以著手開始做 .NET Core 2 的取用程式了。 CWODP取用 XML 檔案的 URI: http://opendata.cwb.gov.tw/opendataapi?dataid= {資料代碼} &authorizationkey= {授權碼} .NET Core 2 使用 HttpClient 有以下幾種: 一般 HttpClient 方式 直接使用 HttpClientFactory 具名式 Client 型別式 Client 產生式 Client 一般 HttpClient 方式 FileController.cs using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using System.Net.Http; namespace CWBReader.Controllers {     [Route("[controller]")]     public class FileController : Controller     {         [Route("")]         public async Task<string> DownloadFile()         {             using (var client = new HttpClient())             {                 string url = "http://opendata.cwb.gov.tw/opendataapi?dataid=F-C0032-0

[研究]ASP.NET Core 2 關於 DI 使用的變數為什麼是唯讀屬性

圖片
ASP.NET Core 每次在使用 DI 時,通常都會在 接收 DI 服務的變數宣告上使用了 readonly 的形式? 雖然不使用 readonly 也是可以使用,但是這樣做的主要目的是當 DI 服務備要求導入此變數時,可以確保此變數指向的物件(服務),不會被其它程式碼變更。以免發生 exception。 那麼,很奇怪的是,既然是宣告為 readonly ,為什麼又可以被指定內容(如上圖),很明確的原因有2個: 1、readonly 屬性是在建構(Construction)後才生效,所以在 Constructor 時,是可以指定內容的。 2、readonly 屬性是給編譯器進行檢查用,以確保範圍內(Scope)的程式碼不會對此變數進行內容指派的動作,建構函數執行期除外。 參考: Why is this field declared as private and also readonly?

ASP.NET Core 2 外掛設定檔

圖片
上圖是一般開發 WinForm/APP 時會使用一些設定檔,提供程式一定的彈性,其用法是會把設定檔資訊設定 Properties 屬性裡面的『設定』,而實際會存在 app.config 或是 user.config 裡面,而且是使用XML格式儲存的(如上圖)。 但在ASP.NET Core 2 下如果要使用自己的設定檔,它的使用方式和一般 WinForm/APP 不一樣,因為它沒有預設的介面可以設定,而且它不能儲存 user.config,它反而比較建議使用 JSON 格式來處理設定檔。 畢竟JSON格式是網路上比較通用的格式,處理與閱讀起來也比XML輕鬆。 如果在系統上要一開始就載入設定檔,必需要先建立一個 json 檔案, 例如在程式 root 下新增一個 json 檔,並設定內容: 然後新增 json 檔案內容並儲存 它的結構基本上會像下面: {   "Section" : { "Name" : Value } } 一個 json 裡面可以有許多 section ,每個 section 裡面可以包含多組 name : value 然後在 Program.cs 裡面使用 ConfigureAppConfiguration 增加組態設定, (這個 ConfigureAppConfiguration 本身就是一種 DI) Program.cs namespace MyWeb1 {     public class Program     {         public static void Main(string[] args)         {             CreateWebHostBuilder(args).Build().Run();         }         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>             WebHost.CreateDefaultBuilder(args)             .ConfigureAppConfiguration((webHostBuil

在 IIS 上執行 ASP.NET Core

圖片
雖然,ASP.NET Core 的程式可以單獨執行(使用內建 kestrel 伺服器),但是 kestrel 畢竟是輕量化服務器,操作與設定不熟悉的人使用起來就會頗困難。 而且,在有規模公司裡面伺服器 IIS 管理人可能又跟寫這程式碼的人不是同一個人,因此大原則上,程式設計就歸程式設計,伺服器管理就歸伺服器管理是比較標準的做法。 那麼 IIS 上如何掛上 ASP.NET Core 的應用呢? 建議使用 IIS 8.0 以上的版本(官方建議啦),原則上就是 Server 2008 以上作業系統。 一、 下載執行環境套件 Runtime : Microsoft Visual C++ 2015 Redistributable (非必要,除非該機器沒有裝過,下載要注意X86或X64版本) .NET Core Runtime (注意你的SDK版本) 在下載 .NET Core Runtime 時,一般都是下載最新版即可,如下圖: 但是如果你的SDK(開發)版本差異太大,例如你使用 SDK 2.0,而 Runtime 使用 2.1 ,則可能發生程式無法執行的錯誤,建議更新 SDK 後再重新編譯程式放到伺服器上,不然就是安裝降版的 Runtime ,若要安裝其它版本 Runtime,請點選下面聯結,尋找適當版本的 Runtime: 選擇其他版本,例如 2.0 版 下載該版本的 Runtime 二、 在伺服器上,將 Microsoft Visual C++ 2015 Redistributable 與 .NET Core Runtime 安裝好。 三、 建立程式放置資料夾與設定權限,如果直接使用 IIS 的內定資料夾 C:\inetpub 者,則省略此步驟。我再這個案例是建立在 D:\inetpub\api ,所以必須增加資料夾使用權限給 IIS 使用。 四、 在IIS管理員裡面新增應用程式集區         名稱雖然可以自己訂,但要易於識別所以取名為 .NET Core,然後 .NET CLR 版本要選『沒有Managed程式碼』(Unmanaged Code)。 五之一、 新增站台方式(如果要繼續使用80port做為http的服務,請確認原本IIS的站台 Default W

ASP.NET Core 2 關於 MVC Route Attribute

圖片
關於 ASP.Net Core 2 裡面使用的路由方式有很多種,MVC 的 Route Attribute 算是我常用的方法,因為它的維護上可以和主程式分離所以比較容易。 但是,一開始的時候常常搞不懂它的運作方式,跌跌撞撞失敗了不少次才搞懂,因此特別記錄下來以便給其他需要的人看。 先講 MVC 裡面對於 URL 的拆解方式,假如看到下面的 URL: http://localhost:5000/hr/Employee_GetByID?=k004521 它的組成就是像下面階層一樣: 用企業的描述法來說就是到 localhost:500 的服務器上, (Controller)取得人資系統(HR/Human Resources)資訊裡, (Action)以ID方式取得員工資料(Employee_GetByID), (Arguments)員工編號為 k004521 這樣好處是容易理解這個 Request 的目的。 當然回傳的內容依照自己系統需求而訂,可以是純字串、XML字串或是JSON字串都可以。 那麼,在ASP.NET Core 2 如何實現呢? 首先,準備一個類別檔案 ApiControllers.cs,這檔案我習慣放在 Controllers 資料夾下面(分類整理比較方便),當然懶得這樣分類也是可以放在與 Startup.cs 同一層下 using Microsoft.AspNetCore.Mvc ; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace SimplyApi.Controllers {    [ Route ( "about" )]     public class ApiAboutController {       [ Route ( "" )]       public string home() {           return "Resource Support API" ;       }       [ Route ( "co