1. 程式人生 > >ASP.NET Core 專案配置 ( Startup )(轉載)

ASP.NET Core 專案配置 ( Startup )(轉載)

原文:https://www.twle.cn/l/yufei/aspnetcore/dotnet-aspnet-startup.html

由於是個人網站,怕沒了,特意複製儲存,個人覺得講的非常透徹

 

前面幾章節中我們已經介紹和使用過 Startup 類,包括

  1. 在建立新專案時修改了 Startup 類中的 Hello World 修改返回值
  2. 上一章節中講解 Program.cs 時講到 Program 類會例項化 Startup 類

但 Startup

 能做的不僅僅是這些,可以說 ASP.NET Core 中大大小小的各個元件和中介軟體都會和 Startup類打交道。

但一個章節又不能全部講完。於是乎,這章節我們只講解最重要的幾個東西

以前的版本

如果你曾經使用過 ASP.NET,那麼你可能會期望

  1. 看到一個 global.asax 檔案,可以在啟動 Web 應用程式期間編寫程式碼來執行的一個地方

  2. 看到一個 web.config 檔案,用來包含應用程式需要執行的所有配置引數

在 ASP.NET Core 中,這些檔案全部消失,取而代之的是使用 Startup.cs 載入配置和啟動程式碼

Startup.cs 檔案中有一個 Startup 類,在這個類中可以配置應用程式,甚至配置配置源

預設的 Startup.cs 檔案內容

Startup.cs 檔案中預設的內容如下

using System;
using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; namespace HelloWorld { public class Startup { // 該方法在執行時被呼叫。 // 可以使用該方法將服務新增到容器中 // 更多資訊配置應用程式的資訊,可以檢視 https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // 該方法在執行時被呼叫 // 可以使用該方法來配置 HTTP 請求管道 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); } } } 

Startup 類

Startup 類可以用來定義請求處理管道和配置應用程式需要的服務。

Startup 類必須是公開的,且必須包含以下兩個方法

  1. ConfigureServices() 方法

    public void ConfigureServices(IServiceCollection services){}
    

    ConfigureServices() 方法用於定義應用程式所需要的服務,例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 等等

    關於 服務 我們會再接下來的章節中詳細介紹

  2. Configure() 方法

    public void Configure(IApplicationBuilder app, IHostingEnvironment env){}
    

    Configure() 用於定義請求管道中的中介軟體

    關於 請求管道 的概念,我們會在接下來的章節中詳細介紹

專案配置

Startup 類中的 Configure() 方法用於配置和構建 HTTP 請求管道的地方

該怎麼理解這句話呢?

其實也就是說,Configure() 方法可以用來定義我們的應用程式如何響應請求

對於任意網址,預設情況下它只會輸出 Hello World!

如果我們希望應用程式的行為不同,我們需要在 Configure() 方法中新增其他程式碼來更改管道

例如,如果我們想要為諸如 index.html 之類的靜態檔案提供服務,則需要向 Configure() 方法新增一些程式碼

例如,如果想要給 ASP.NET MVC 控制器傳送錯誤頁面或路由請求,都需要在這個 Configure() 方法中做一些工作

動態響應內容

預設情況下,我們為每個請求都提供了一個硬編碼的響應 Hello World!

接下里來我們不再使用硬編碼,而是從某個元件中載入字串來響應的每一個請求

  1. 在解決方案管理器的 HelloWorld 專案上點選右鍵,選擇 新增 -> 新建檔案

    如果你的電腦是 Windows ,則是 新增 -> 新建項

  2. 在新建檔案對話方塊中,選中左邊的 Web,然後選中右邊的 空 JSON 檔案

    如果你的電腦是 Windows ,則是先選中 ASP.NET Core 下的 常規 ( Genreral ) 然後選中 JSON 檔案

  3. 在名稱中輸入 AppSettings.json,然後點選右下腳的 新建 按鈕,新增一個 AppSettings.json 檔案

    如果你的電腦是 Windows ,則是點選 新增 按鈕

  4. 然後雙擊 AppSettings.json 開啟檔案,輸入以下內容

    {
        "message":"Hello World!\n你好,簡單教程,你的網址是 www.twle.cn 嗎?"
    }
    
  5. 雙擊開啟 Startup.cs 檔案,在 Startup 類中新增一個可讀寫屬性 Configuration

    public IConfiguration Configuration { get; set; }
    
  6. 修改 Startup 類,新增 Startup() 建構函式,載入 AppSettings.json 檔案,然後構建配置項

    public Startup() 
    { 
        var builder = new ConfigurationBuilder().AddJsonFile("AppSettings.json"); 
        Configuration = builder.Build(); 
    }
    
  7. 最後修改 Configure() 方法,從配置項中讀取 message 並作為響應的內容

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.Run(async (context) =>
        {
            var msg = Configuration["message"];
            await context.Response.WriteAsync(msg);
        });
    }
    

修改完成後的程式碼如下

Startup.cs

using System;
using System.IO; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; namespace HelloWorld { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("AppSettings.json"); Configuration = builder.Build(); } public IConfiguration Configuration { get; set; } // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); } } } 

點選綠色三角形執行專案 ( 如果專案已經在執行則直接重新整理瀏覽器即可 )

重新整理瀏覽器,顯示結果如下