iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
0
Modern Web

我與 ASP.NET Core 的 30天系列 第 2

[Day02] 自我介紹!我叫做 ASP.NET Core 3

簡介ASP.NET Core

ASP.NET Core 是一個由微軟創建的跨平臺、高效能、開放原始碼的架構,可用於建立現代化、具備雲端功能的web應用程式。

透過 ASP.NET Core,你可以
1. 建置網站、API或是物聯網應用程式
2. 可以在Windows、macOs或是Linux上進行開發
3. 部署到雲端或公司內部主機

ASP.NET MVC 5 與 ASP.NET Core 差異:

  • 移除web.config檔案

  • 移除global.asax

  • 加入appsettings.json

  • 能夠裝載于下列各項:

    • Kestrel
    • IIS
    • HTTP.sys
    • Nginx
    • Apache
    • Docker
  • 內建DI

  • 前後端拆分-使用wwwroot 靜態檔案目錄分離

  • Razor語法中的 Tag Helpers 更貼近原生html的寫法

ASP.NET core 包含

  • Web app :

    • MVC/ Razor Page / Blazor / Razor class library / TagHelpers / Razor syntax / View components / Razor components class library / Action Filter
  • Web API

  • gRPC

  • SignalR

  • Entity Framwork Core

  • Identity

ASP.NET Core 網站生命週期

.NET Core 的專案預設都是從Program.cs 中的 Main() 作為起始的進入點。

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>();
            });
}

啟動的流程如下

Web類型的專案則會透過 Program.Main() 中的 CreateHostBuilder() 來建立及設定 WebHost,並在其中透過呼叫ConfigureWebHostDefaults() 把Web Server 設置為 Kestral Server 並設定啟動要執行的Startup,之後透過Build()運行設定給初始化主機IHost(只能被使用一次)。

接著透過Run()運行應用程式。

Startup.cs

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

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

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

Startup裡主要的內容有兩個方法:

ConfigureServices
將應用程式所需的「服務」註冊到 DI 容器
此方法只會在應用程式啟動時執行一次

Configure
此方法用來設定 ASP.NET Core 如何回應用戶端要求
透過 IApplicationBuilder 來設定 Request 進出的Pipeline
此方法一定要定義,ASP.NET Core 才能執行

透過下面簡單的圖示可以了解上述的運行流程
https://ithelp.ithome.com.tw/upload/images/20200916/201293896gDEwTZxQu.png

首先先從使用者發出HTTP的要求
透過反向代理(也可以不用)把要求發送到 ASP.NET Core的應用程式中
透過Kestrel Server 把 HTTP Request 送至 Middleware 也就是 Startup.Configure()中
透過Middleware 依序處理要求
接著運行應用程式的程式碼
再把程式運行結果透過 Middleware 依照倒序處理Response
最後再透過Kestrel Server將回應吐出

這就是一個基本ASP.NET Core 應用程式的流程

目錄結構

通用

目錄 作用
wwwroot/ 網站靜態資源的資料夾
Properties/launchSettings.json 透過 dotnet run 啟動時的檔案
*.csproj 專案檔
Program.cs 程式進入點
Startup.cs 啟動設定
appsettings.json 組態設定檔

MVC

目錄 作用
Controllers 控制器
Models 模型
Views 檢視

Web App (Razor Pages)

目錄 作用
Pages 所有Razor頁面

Web API

目錄 作用
Controllers 控制器

Blazor

目錄 作用
Pages 所有頁面
Pages/_Host.cshtml 預設首頁 (_Host.cshtml)
Pages/*.razor 所有 Blazor 元件(頁面)
Shared 共用 Blazor 元件的資料夾
Data 預設的資料存取類別所在的資料夾

gRPC

目錄 作用
Protos Protocol Buffer File
Services gRPC 服務的實作類別

ASP.NET Core 相對於以往的 ASP.NET,體系結構上有著比較大幅度的更改,使得ASP.NET Core 變得精簡且模組化。在開發工具方面,也多了許多選項可以選擇。

接下來的幾天,將會更深入理解ASP.NET Core,有問題也歡迎一同留言討論!


上一篇
[Day01] 我與 .NET Core 的邂逅
下一篇
[Day03] Middleware- 我與 ASP.NET Core 3 的 30天
系列文
我與 ASP.NET Core 的 30天31

尚未有邦友留言

立即登入留言