一步一步帶你做WebApi遷移ASP.NET Core2.0

來源:互聯網
上載者:User

標籤:creat   lin   system   asp.net   nta   war   windows環境   環境變數   cep   

隨著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 的功能相對比較簡單,所以我們還是需要一個反向 Proxy伺服器將 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工程之前,我們要評估一下有哪些具體的遷移工作:

  1. 引用的Nuget和dll遷移
  2. Web.Config檔案遷移
  3. 自訂WebApi路由遷移
  4. Controller遷移
  5. HttpModule擴充遷移
  6. 各類自訂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中用到的點滴技術,分享給大家。

 

周國慶

2017/9/28

 

一步一步帶你做WebApi遷移ASP.NET Core2.0

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.