Day01 - 探索ASP.NET Core 3的結構


建立專案

  1. 開啟 Visual Studio,並新增一個 ASP.NET Core Web 應用程式。
  2. 填寫專案名稱,並選擇想存放的路徑。在這系列文中,我們將專案名稱取名為「OdeToFood」。
  3. 從零開始,我們從「空白」的模板開始一一解釋,選擇「空白」的模板。
    註:至 .NET Core 3 以後,將不再執行於 .NET Framework 環境底下,而是執行在 .NET Core 喔!
  4. 成功建立專案!

專案檔案介紹

Globomantics.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>
  • 可以看到第四行<TargetFramework>是我們剛剛建立專案時選的 Framework ,若要更換其他 Framework ,可以從這裡更改。

Program.cs

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
  • Main method在這裡,也就是程式的進入點。
  • 在 mina method 裡面,去 call 下面宣告的 CreateHostBuilder method,回傳 IHostBuilder 後, Build .NET Core App ,並執行。
  • 而 CreateHostBuilder 裡面的 ConfigureWebHostDefaults 建立 Web 的預設組態環境,包含 ASP.NET Core 如何去處理 Web Server、Config檔、Routing等。而ASP.NET Core 預設會去載入 appsetting.json 設定。
  • Web Host Builder 同時也載入 Startup Class。

Startup.cs

public class Startup
    {
        // 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, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
  • 可以看到 Startup 是一個沒有任何繼承的普通 Class。
  • 在 Startup 中,有兩個 method。首先會呼叫 ConfigureServices,然後再來是 Configure。我們將在下文介紹這兩個method。

ConfigureServices

ConfigureServices 主要負責相依性注入(Dependency Injection,DI)。在 ASP.NET Core 中,依賴項注入是 ASP.NET 本身不可或缺的一部分。依賴項注入機制取決於IoC容器(IoC的介紹可看這篇文,講解的淺顯易懂)。通常,當應用程序啟動時,類似類的類型會在容器中註冊。用依賴注入的術語,這些類型稱為服務。一旦註冊,其他類型可以向容器詢問該類型的實例。此外,在註冊期間,您可以確定該實例的生存期。對象的生存期由容器管理。

因為我們建立專案時選擇空白的模板,所以它這邊不會幫我們預設加入service。此系列文將使用 ASP.NET Core 3 MVC 來建立專案,所以這邊我們程式加入這行services.AddControllersWithViews()

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
        }

若你的專案是普通的 API 專案,你可以只註冊你要的Controller:services.AddControllers();如果是Razor頁面,則可以單獨加入services.AddRazorPages()這行來擴充。

Configure

您可以看到它接受另一個名為IApplicationBuilder的服務的接口對象。app這個物件被注入到這個 method 裡面。這個 method 設置了 ASP.NET Core 的 HTTP 請求管道。管道指定 application 應如何響應 HTTP request。當 application 收到來自瀏覽器的 request 時,該 request 將通過管道返回。當管道中沒有任何東西時,什麼也不會發生,因此您需要插入所需的東西。組成管道的各個部分稱為 middleware。例如,可以將MVC框架作為 middleware 插入,但是您可能需要首先進行一些身份驗證。在這種情況下,請在MVC之前配置一塊 middleware。甚至提供包含JavaScript和CSS的靜態文件的功能也必須配置為 middleware。在管道中傳輸時,有關請求的數據在其中傳輸,並由中間件讀取和操縱,最終得到 response。







Related Posts

[ week 1 ] 前端、後端的差異?

[ week 1 ] 前端、後端的差異?

每日心得筆記 2020-07-02(四)

每日心得筆記 2020-07-02(四)

Day00

Day00

Markdown 功能筆記

Markdown 功能筆記

掌握產品及團隊的現況

掌握產品及團隊的現況

Day04 git 知己知彼

Day04 git 知己知彼



Comments