1. 程式人生 > >ASP.NET Core 中文文件 第三章 原理(11)在多個環境中工作

ASP.NET Core 中文文件 第三章 原理(11)在多個環境中工作

ASP.NET Core 介紹了支援在多個環境中管理應用程式行為的改進,如開發(development),預演(staging)和生產(production)。環境變數用來指示應用程式正在執行的環境,允許應用程式適當地配置。

章節:

開發,預演,生產

ASP.NET Core 引用了一個特定的環境變數 ASPNETCORE_ENVIRONMENT 來描述應用程式當前執行的環境。這個變數可以被設定為任何你喜歡的值,但是有三個值被約定使用: DevelopmentStagingProduction。你會發現這些值在 ASP.NET Core 提供的示例和模板中被使用。

當前的環境設定可以通過程式設計方式從應用程式中被檢測到。除此之外,你可以基於當前的應用程式環境在你的

view 裡使用環境 tag helper 來包含某些部分。

注意
指定的環境變數名稱不區分大小寫。無論你把變數設定為 Development 或者 development 或者 DEVELOPMENT 的結果將會是相同的。

開發

這應該是在開發應用程式時所使用的環境。當使用 Visual Studio 時,這個設定可以在專案的除錯配置檔案中指定,比如 IIS Express,在這裡顯示:

當你修改該專案建立的預設設定,你的更改會保留在 Properties 資料夾的 launchSettings.json 檔案中。這個檔案對於 Visual Studio 中每一個用來啟動應用程式的配置檔案都包含特定的設定,包括應該使用的任何環境變數。(在

servers 中更詳細的討論了除錯配置檔案)。例如,新增另一個 profile 配置來使用 IIS Express,使用 Staging 作為 ASPNETCORE_ENVIRONMENT 的值,在我們的示例專案中 launchSettings.json 檔案如下圖所示:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:40088/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express (Staging)": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    }
  }
}

注意
專案配置檔案或 launchSettings.json 所做的更改在使用的 web 伺服器重啟之前可能不會直接生效(尤其是, kestrel 在將要檢測它的環境變化之前必須重啟)。

你可以為你的應用程式的不同配置檔案建立多個不同的啟動配置,包括它們需要的其他環境變數。

警告
環境變數儲存在 launchSettings.json 不是安全的,並且將作為你的應用程式原始碼倉庫的一部分,如果你使用其中一個。 堅決不要在這個檔案裡儲存證書或其他安全資料。 如果你需要一個地方來儲存這些資料,使用 Safe storage of app secrets during development 裡描述的 Secret Manager 工具。

預演

按照慣例, Staging 環境是用於部署到生產環境前進行最後測試的預生產環境。理想的情況下,它的物理特徵應該是生產環境的真實寫照,因此生產環境中可能出現的任何問題都首先發生在預演環境中,在這裡可以解決它們而不影響到使用者。

生產

Production 環境是應用程式執行的環境,它是活動的並且被終端使用者使用。這個環境應該被配置為最大限度提高安全性,效能和應用程式的健壯性。生產環境不同於開發環境的一些通用的設定包括:

  • 啟用快取
  • 確保所有的客戶端資源被打包,壓縮和儘可能從CDN提供
  • 關閉診斷錯誤頁面
  • 啟用友好的錯誤頁面

這並不是一個完整的列表。最好避免在你的應用程式各個部分散亂的環境檢查。相反,推薦的方式是儘可能在應用程式的 Startup 類中進行這樣的檢查。

在執行時確定環境

IHostingEnvironment 服務為工作環境提供了核心抽象。該服務由 ASP.NET 宿主層提供,並且能夠通過 Dependency Injection 注入到你的啟動邏輯中。在 Visual Studio 中的 ASP.NET Core 網站模板使用這種方式來載入特定的環境配置檔案(如果存在的話)並且自定義應用程式的錯誤處理設定。在這兩種情況下,這種行為是由通過參照當前指定的環境來呼叫 IHostingEnvironment 的例項上的 EnvironmentNameIsEnvironment 上傳遞到適當的方法來實現。

注意
如果你需要檢查該應用程式是否在特定環境中執行,使用 env.IsEnvironment("environmentname") 因為它會正確的忽略大小寫(而不是檢查例如 env.EnvironmentName == "Development" )。

例如,你可以使用如下程式碼在你的配置方法中設定特定環境的錯誤處理:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    // ...

如果應用程式執行在 Development 環境中,那麼它在 Visual Studio 中開啟必要執行時支援來使用瀏覽器連結(BrowserLink)功能,特定的開發錯誤頁面(這通常不應該在生產中執行)和特定的資料庫錯誤頁面(它提供了一種應用遷移的方法,因此應該僅在開發中使用)。另外的,如果應用程式不是在開發環境中執行,配置一個標準的錯誤處理頁面來顯示響應中的任何未處理異常。

你可能需要在執行時確定需要向客戶端傳送哪些內容。例如,在開發環境中你通常提供非最小化的指令碼和樣式表,這更容易除錯。在生產和測試環境一般應當從 CND 提供最小化的版本。你可以使用環境 tag helper 做到這一點。如果當然環境與使用 names 特性指定的環境相匹配,環境 tag helper 將只提供它的內容。

<environment names="Development">
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment names="Staging,Production">
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
          asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
          asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
    <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>

在你的應用程式開始使用 tag helpers 檢視 tag helper

啟動約定

ASP.NET Core 支援一種基於約定的方法來根據當前環境配置應用程式的啟動。依據你的應用程式在哪一種環境,你也可以使用程式設計的方式控制應用程式的行為,允許你建立和管理你自己的約定。

當 ASP.NET Core 應用程式啟動, Startup 類用來引導應用程式,載入其配置設定等(學習更多關於 ASP.NET startup)。然而,如果一個類的命名存在 Startup{EnvironmentName} (例如 StartupDevelopment),並且 Hosting:Environment 環境變數和它的名稱相匹配,那麼則使用那個 Startup 類。

除了使用一個基於當前環境的完全獨立的啟動類,你也可以在 Startup 類中對應用程式如何配置做出調整。Configure()ConfigureServices() 方法類似 Startup 類,以 Configure[EnvironmentName]()Configure[EnvironmentName]Services() 的形式支援特定環境的版本。當設定為開發環境時,如果你定義一個 ConfigureDevelopment() 方法,將呼叫這個方法而不是 Configure()。同樣,在相同的環境裡將呼叫 ConfigureDevelopmentServices() 而不是 ConfigureServices()

概要

ASP.NET Core 提供了許多功能和約定來允許開發者更容易的控制在不同的環境中他們的應用程式的行為。當釋出一個應用程式從開發到預演再到生產,為環境設定適當的環境變數允許對應用程式的除錯,測試或生產使用進行適當的優化。

附加資源

返回目錄

相關推薦

ASP.NET Core 中文 原理11環境工作

ASP.NET Core 介紹了支援在多個環境中管理應用程式行為的改進,如開發(development),預演(staging)和生產(production)。環境變數用來指示應用程式正在執行的環境,允許應用程式適當地配置。 章節: 開發,預演,生產 ASP.NET Core 引用了一個特定的環境變數

ASP.NET Core 中文 原理2中介軟體

章節: 什麼是中介軟體 中介軟體是用於組成應用程式管道來處理請求和響應的元件。管道內的每一個元件都可以選擇是否將請求交給下一個元件、並在管道中呼叫下一個元件之前和之後執行某些操作。請求委託被用來建立請求管道,請求委託處理每一個 HTTP 請求。 請求委託通過使用 IApplicationBuilder

ASP.NET Core 中文 原理6全球化與本地化

使用 ASP.NET Core 建立一個多語言版本的網站有助於你吸引到更多的使用者,ASP.NET Core 提供服務和中介軟體來支援本地化語言和文化。 國際化涉及 全球化 和 本地化。全球化是為了應用程式支援不同文化而設計的。全球化增加了對特定地理區域的語言文字的輸入、顯示和輸出的支援。 本地化是針對一個

ASP.NET Core 中文 原理4路由

路由是用來把請求對映到路由處理程式。應用程式一啟動就配置了路由,並且可以從URL中提取值用於處理請求。它還負責使用 ASP.NET 應用程式中定義的路由來生成連結。 這份文件涵蓋了初級的ASP.NET核心路由。對於 ASP.NET 核心 MVC 路由, 請檢視 Routing to Controller A

ASP.NET Core 中文 原理13管理應用程式狀態

在 ASP.NET Core 中,有多種途徑可以對應用程式的狀態進行管理,取決於檢索狀態的時機和方式。本文簡要介紹幾種可選的方式,並著重介紹為 ASP.NET Core 應用程式安裝並配置會話狀態支援。 應用程式狀態的可選方式 應用程式狀態 指的是用於描述應用程式當前狀況的任意資料。包括全域性的和使用者特

ASP.NET Core 中文 原理1應用程式啟動

ASP.NET Core 為你的應用程式提供了處理每個請求的完整控制。Startup 類是應用程式的入口(entry point),這個類可以設定配置(configuration)並且將應用程式將要使用的服務連線起來。開發人員可以在 Startup 類中配置請求管道,該管道將用於處理應用程式的所有請求。 章

ASP.NET Core 中文 原理16.NET開放Web介面OWIN

ASP.NET Core 支援 OWIN(即 Open Web Server Interface for .NET 的首字母縮寫),OWIN的目標是用於解耦Web Server和Web Application。此外, OWIN為中介軟體定義了一個標準方法用來處理單個請求以及相關聯的響應。ASP.NET Co

ASP.NET Core 中文 原理17為你的伺服器選擇合適版本的.NET框架

ASP.NET Core基於 .NET Core 專案模型,它支援構建能夠執行在 Windows、Mac和 Linux 上的跨平臺應用程式。當您構建一個 .Net Core 專案的時候,您可以選擇一種 .NET框架來構建您的應用程式,.NET Framework (CLR)、 .NET Core (Core

ASP.NET Core 中文 MVC01ASP.NET Core MVC 概覽

ASP.NET Core MVC 是使用模型-檢視-控制器(Model-View-Controller)設計模式構建網頁應用與 API 的豐富的框架。 什麼是 MVC 模式? 模型-檢視-控制器(MVC)架構模式將一個應用區分為三部分主要元件:模型、檢視、與控制器。這種模式有助實現關注分離。使用這種模式,使

ASP.NET Core 中文 MVC4.6Areas區域

Areas 是 ASP.NET MVC 用來將相關功能組織成一組單獨名稱空間(路由)和資料夾結構(檢視)的功能。使用 Areas 建立層次結構的路由,是通過新增另一個路由引數 area 到 Controller 和 action。 Areas 提供了一種把大型 ASP.NET Core MVC Web 應用

ASP.NET Core 中文 測試5.2整合測試

整合測試確保應用程式的元件組裝在一起時正常工作。 ASP.NET Core支援使用單元測試框架和可用於處理沒有網路開銷請求的內建測試的網路主機整合測試。 章節: 整合測試介紹 整合測試驗證應用程式不同的部位是否正確地組裝在一起。不像單元測試,整合測試經常涉及到應用基礎設施,如資料庫,檔案系統,網路資源

ASP.NET Core 中文 MVC4.2控制器操作的路由

ASP.NET Core MVC 使用路由 中介軟體 來匹配傳入請求的 URL 並對映到具體的操作。路由通過啟動程式碼或者特性定義。路由描述 URL 路徑應該如何匹配到操作。路由也同樣用於生成響應中返回的 URL(用於連結)。 這篇文章將解釋 MVC 和路由之間的相互作用,以及典型的 MVC 應用程式如何使

ASP.NET Core 中文 MVC4.1Controllers, Actions 和 Action Results

Action 和 action result 是開發者使用 ASP.NET MVC 構建應用程式的基礎部分。 什麼是 Controller 在 ASP.NET MVC 中, 控制器( Controller  )用於定義和聚合操作(Action)的一個集合。操作( 或操作方法 )是控制器中處理入站請求的一個方

ASP.NET Core 中文 MVC2.3格式化響應資料

ASP.NET Core MVC 內建支援對相應資料(response data)的格式化,用來修正格式或生成客戶端指定的格式。 特定格式的操作結果 某些操作結果(Action result)的型別是指定的特定格式,比如 JsonResult 或 ContentResult。Action 可以返回格式化為

ASP.NET Core 中文 MVC4.4依賴注入和控制器

ASP.NET Core MVC 控制器應通過它們的構造器明確的請求它們的依賴關係。在某些情況下,單個控制器的操作可能需要一個服務,在控制器級別上的請求可能沒有意義。在這種情況下,你也可以選擇將服務作為 action 方法的引數。 章節: 依賴注入 依賴注入(Dependency injection,

ASP.NET Core 中文 MVC4.3過濾器

ASP.NET MVC 過濾器 可在執行管道的前後特定階段執行程式碼。過濾器可以配置為全域性有效、僅對控制器有效或是僅對 Action 有效。 過濾器如何工作? 不同的過濾器型別會在執行管道的不同階段執行,因此它們各自有一套適用場景。根據你實際要解決的問題以及在請求管道中執行的位置來選擇建立不同的過濾器。

ASP.NET Core 中文 MVC3.8檢視的依賴注入

ASP.NET Core 支援在檢視中使用 依賴注入 。這將有助於提供檢視專用的服務,比如本地化或者僅用於填充檢視元素的資料。你應該儘量保持控制器和檢視間的關注點分離(separation of concerns)。你的檢視所顯示的大部分資料應該從控制器傳入。 章節: 一個簡單的示例 你可以使用 @i

ASP.NET Core 中文 MVC3.7 區域性檢視partial

ASP.NET Core MVC 支援區域性檢視,當你需要在多個不同檢視間重用同一個頁面部件時會顯得特別有用。 什麼是區域性檢視? 區域性檢視是在其它檢視中被渲染的檢視。區域性檢視執行後生成的 HTML 結果會被渲染到呼叫方檢視或父檢視中。跟檢視檔案一樣,區域性檢視檔案也使用 .cshtml 作為副檔名。

ASP.NET Core 中文 MVC4.5測試控制器邏輯

ASP.NET MVC 應用程式的控制器應當小巧並專注於使用者介面。涉及了非 UI 事務的大控制器更難於測試和維護。 章節: 為什麼要測試控制器 控制器是所有 ASP.NET Core MVC 應用程式的核心部分。因此,你應當確保它們的行為符合應用的預期。 自動化測試可以為你提供這樣的保障並能夠在進入生

ASP.NET Core 中文 MVC3.9檢視元件

章節: 介紹檢視元件 檢視元件是 ASP.NET Core MVC 中的新特性,與區域性檢視相似,但是它們更加的強大。檢視元件不使用模型繫結,只取決於呼叫它時所提供的資料。檢視元件有以下特點: 渲染一個塊,而不是整個響應 在控制器和檢視之間同樣包含了關注點分離和可測試性帶來的好處 可以擁有引數和業務邏