一步一步帶你做WebApi遷移ASP.NET Core2.0
隨著ASP.NET Core 2.0釋出之後,原先執行在Windows IIS中的ASP.NET WebApi站點,就可以跨平臺執行在Linux中。我們有必要先說一下ASP.NET Core。
ASP.NET Core 是新一代的 ASP.NET,第一次出現時的代號為 ASP.NET vNext,後來命名為ASP.NET 5,隨著它的完善與成熟,最終命名為 ASP.NET Core,這表明它已不是 ASP.NET 的升級,而是一個重新設計的Web開發框架。而它一個非常重要的變化就是它不再依賴於IIS,而是一個獨立的自寄宿的控制檯應用程式,這也是它可以跨平臺的根本。
兩個關鍵詞:IIS解耦和獨立自寄宿的控制檯應用程式。
我們對比一下ASP.NET和ASP.NET Core。ASP.NET 是強依賴於Windows IIS的,因為System.Web 中有很多方法都是直接呼叫的 IIS相關的 API,同時它還是駐留在IIS程式中的。然而 ASP.NET Core 執行時則是一個完全獨立的控制檯應用程式,它有自己的 Kestrel Server,可以直接對外部提供服務。不過當前已有的 Kestrel Server 的功能相對比較簡單,所以我們還是需要一個反向代理伺服器將 Kestrel 伺服器保護起來。因此,部署在Linux環境下,可以考慮Nginx+Kestrel Server的組合,Windows環境下,支援和IIS的直接整合(UseIISIntegration),部署在IIS中。
我們進入今天的主題,將原有ASP.NET WebApi工程遷移到ASP.NET Core 2.0.
一、ASP.NET Core WebApi工程
開啟VS2017(版本一定要大於15.3),新建專案:ASP.NET Core Web應用程式
新建後的解決方案和工程:
二、ASP.NET Core WebHost構造和執行
大家可以發現,有了Program.cs類,有了Main函式,控制檯應用程式就可以執行了。
繼續看,構造並啟動了一個WebHost. 疑問來了,WebHost是什麼機制?如果構造的?
WebHost.CreateDefaultBuilder是在ASP.NET Core 2.0中新增的,在Microsoft.AspNetCore名稱空間下。我們看一下CreateDefaultBuilder的原始碼:
整個WebHost物件的構造過程是這樣的:
1. 註冊 Kestrel 中介軟體,指定當前WebHost 要使用的 Server(HTTP伺服器)。
2. 設定 Content 根目錄,將當前專案的根目錄作為 ContentRoot 的目錄。
3. 讀取 appsettinggs.json 配置檔案,開發環境下的 UserSecrets 以及環境變數和命令列引數。
4. 讀取配置檔案中的 Logging 節點,對日誌系統進行配置。
5. 新增 IISIntegration 中介軟體,整合到IIS中執行。
6. 設定開發環境下, ServiceProvider 的 ValidateScopes 為 true,避免直接在 Configure 方法中獲取 Scope 例項。
7. 指定 Startup 類,通過 Build 方法建立 WebHost 物件。
Main函式中,BuildWebHost(args).Run(); 執行建立好的WebHost。
三、除錯執行
ValuesController中的Action實現:
四、ASP.NET WebApi遷移評估
在真正遷移ASP.NET WebApi工程之前,我們要評估一下有哪些具體的遷移工作:
- 引用的Nuget和dll遷移
- Web.Config檔案遷移
- 自定義WebApi路由遷移
- Controller遷移
- HttpModule擴充套件遷移
- 各類自定義Attribute遷移
我們服務閘道器用的WebApi主要涉及上述6個部分,大家可以根據實際情況增加和刪除。
五、一步一步遷移ASP.NET Core WebApi
1. 遷移之前首先要建立一個空的ASP.NET Core2.0 WebApi專案:
2. 遷移Controller和Model
在新建的工程中復刻已有的Controller和Model的,例如:
3. 遷移各類Attribute,屬性標籤,例如:本例中的自定義異常處理標籤
4. 遷移Web.Config
為了更好的相容.NET 原有的配置檔案和配置系統。雖然提供了Nuget:
System.Configuration.ConfigurationManager
但是實際上,Web.Config是為了IIS而設計的,在新的ASP.NET Core中推薦使用appSettings.json替換改造。即:將XML化的配置檔案修改為JSON配置檔案。
核心的NameSpace:Microsoft.Extensions.Configuration
具體可以參考微軟的官方資料:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration
配置讀取示例:
5. WebApi自定義路由重寫
在很多WebApi專案中,採用了自定義路由,例如我們的CommonController,自定義路由在ASP.NET Core2.0中如何支援的呢?
在StartUp類中,提供Configure方法:
在這裡,我們加入自定義路由配置,對應我們剛才的CommonController:
6. IHttpModule擴充套件遷移ASP.NET Core2.0
在ASP.NET Core2.0中提供了中介軟體的概念,支援請求和響應之間的鏈式擴充套件:
具體可以參考微軟官方資料:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware
https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules
這裡,示例一下我們自己寫的自定義中介軟體:
這裡巧妙的通過擴充套件方法的方式,擴充套件了介面IApplicationBuilder,
同時在StartUp的Configure方法中載入擴充套件的自定義中介軟體:
以上就是我們在將WebApi站點遷移到ASP.NET Core2.0中用到的點滴技術,分享給大家。
相關文章
- 一步一步遷移ASP.NET Core 6.0-Part1ASP.NET
- 一步一步遷移ASP.NET Core 6.0-Part2ASP.NET
- 一步一步帶你實現virtualdom(一)
- 一步一步帶你掌握webpack(一)——入門Web
- 一步一步帶你掌握webpack(二)——資產管理Web
- 一步一步帶你掌握webpack(四)——開發Web
- 一步一步帶你掌握webpack(三)——輸出管理Web
- 帶你一步一步瞭解Python中的ClassPython
- 一步一步帶你瞭解EventBus3.1.1 原始碼S3原始碼
- 一步一步帶你封裝基於react的modal元件封裝React元件
- 一步一步帶你實現一個canvas抽獎轉盤Canvas
- 一步步帶你做vue後臺管理框架 - 登入功能Vue框架
- 帶你一步一步手寫一個簡單的Spring MVCSpringMVC
- 一步一步帶你認識MVP+Retrofit+Rxjava並封裝(二)MVPRxJava封裝
- 一步一步帶你認識MVP+Retrofit+Rxjava並封裝(一)MVPRxJava封裝
- 【前端Talkking】CSS系列——一步一步帶你認識animation動畫效果前端CSS動畫
- 帶你一步一步手撕Spring MVC原始碼加手繪流程圖SpringMVC原始碼流程圖
- 手挽手帶你學React:四檔(下篇)一步一步學會react-reduxReactRedux
- Linux驅動實踐:帶你一步一步編譯核心驅動程式Linux編譯
- 一步一步教你如何用Python做詞雲Python
- 帶你一步一步手撕 Mybatis 原始碼加手繪流程圖——執行部分MyBatis原始碼流程圖
- 帶你一步一步探索Flutter(一)-- Flutter初體驗以及認識常用的WidgetFlutter
- 從零開始帶你一步一步使用YOLOv3測試自己的資料YOLO
- 從零開始帶你一步一步使用 YOLOv3 訓練自己的資料YOLO
- 【面試必備】透過原始碼角度一步一步帶你分析 ArrayList 擴容機制面試原始碼
- 一步步帶你實現簡版 ButterKnife
- 【手把手帶你配 webpack】第一步, 做一個高階前端工程師Web前端工程師
- 面試被問懵?帶你一步一步深入Handler原始碼,不信還拿不下面試官?面試原始碼
- 手挽手帶你學React:四檔(上)一步一步學會react-redux (自己寫個Redux)ReactRedux
- 一步一步構建你的網路層-TCP篇TCP
- 一步一步給你的 Android app 加入聊天功能AndroidAPP
- 使用 React + Koa 從零開始一步一步的帶你開發一個 36kr SSR 案例React
- 我是如何一步一步做介面測試的一些感悟
- 2.帶你邁出Flutter開發的第一步Flutter
- 一步一步構建你的iOS網路層 - HTTP篇iOSHTTP
- 使用 React + Koa 從零開始一步一步的帶你開發一個 36kr SSR 案例(一)React
- 使用 React + Koa 從零開始一步一步的帶你開發一個 36kr SSR 案例(二)React
- 一步一圖,帶你瞭解分散式架構的前世今生分散式架構