跳過到頁腳內容
Iron Academy Logo
C# 應用程式
C# 應用程式

其他分類

用ASP.NET Core創建C# Web應用

Tim Corey
52m 05s

建立網頁應用程式是現代開發者的一項基本技能,理解底層的專案結構是至關重要的。 這篇文章靈感來自Tim Corey的影片《Intro to Web API》,深入探討使用ASP.NET Core框架構建網頁應用程式的複雜性。

透過遵循Tim的見解,我們將探索如何設置、配置和優化您的網頁應用程式,利用ASP.NET Core框架的全部潛力來構建高效且易於維護的網頁和API。無論您是網頁開發的新手,還是希望提升技能,本指南將幫助您在網頁開發工作中遊刃有餘,提供構建有效且高性能網頁應用程式所需的知識。

簡介

Tim Corey在他的教程中,以ASP .NET Core創建API為主題開始介紹。 他強調了解API基本原理對於構建穩健且可擴展的網頁應用程式的重要性。

Tim透過解釋API在現代軟體開發中扮演的關鍵角色,引出不同網頁開發框架如Blazor web server及Blazor web assembly之間的通信。 即使是Razor頁面的底層專案類型也是ASP.NET Core,允許各種功能跨多個專案無縫整合以構建網頁應用程式。

創建ASP.NET Core Web API專案

首先,Tim Corey演示了如何設置新的ASP.NET Core Web API專案。 以下是他的影片中描述的步驟:

  1. 打開Visual Studio: 從Visual Studio安裝程式開始,選擇建立新專案的選項。

    開啟Visual Studio

  2. 選擇API模板: 在專案模板中,選擇"ASP.NET Core Web API"並點擊下一步。

    選擇API模板

  3. 配置專案設置: 輸入項目名稱,選擇位置和解決方案名稱。

    配置專案設置

  4. 其他資訊: 選擇.NET Framework,選擇身份驗證類型,他建議不更改其他設置。

    其他資訊

  5. 創建專案: 點擊"創建"以生成具有默認配置和必要代碼的專案。

此設置為API開發探索提供了基礎,Visual Studio生成了一個基本結構,包括基本組件如Program.cs、controllers文件夾和appsettings.json。

預設API應用程式概述

在Tim Corey的影片5:57部分,他提供了ASP.NET Core生成的預設API應用程式概述。

運行預設應用程式

Tim從運行預設應用程式開始,說明開發者從生成的專案中得到什麼。 執行後,專案會構建API、下載必要的NuGet包並啟動網頁。 此初始設置顯示了在未做任何更改的情況下API的基本結構和功能。

運行預設應用程式

與API交互

啟動的網頁由Swagger(現稱為OpenAPI)驅動。 Swagger提供了一個便於與API交互的用戶界面。 它使開發者和非開發者能夠輕鬆理解和測試API端點。 此介面特別有利於可視化API的工作原理和文檔目的。

探索Swagger

Swagger展示了API中的可用端點。 在預設設置中,預配置的端點之一是"天氣預報"端點。 透過點擊此端點並使用"Try it out"功能,用戶可以執行API調用並查看響應。 此響應包含以JSON格式的天氣預報,顯示了數據如何從API返回。

在8:32處,Tim指出,雖然直接從瀏覽器閱讀原始JSON數據可能很具挑戰性,但Swagger的文檔覆蓋使其更容易理解。 文檔提供有關端點的詳細信息,包括請求方法(GET,POST等)、返回數據的結構及任何必要的參數。

JSON文檔和API版本控制

在9:10,Tim指出Swagger還生成了一個JSON文件,以機器可讀的格式記錄API。 此文檔對其他需要與API交互的應用至關重要,因其描述了可用端點、資料架構和預期的響應。

在9:29,Tim指出API中版本控制的重要性。預設設置中包含一個版本指示器,提示可能有多個API版本。 版本控制對維持向後相容性至關重要。 當API的變更可能中斷現有客户端時,擁有多個版本允許開發者引入新功能或變更而不影響現有用戶。

什麼是API

在11:22處,Tim Corey解釋了API(應用程式介面)在現代網頁開發中的基本作用。 他強調其在不同軟體組件之間管理與安全數據交換的重要性。

API的目的

Tim強調大多數應用程式圍繞數據展開—檢索、操作和顯示。 API在用戶介面和底層數據之間充當中介,提供安全且高效的數據存取方式。 此集中式管理因多個原因至關重要:

  1. 安全性: API提供管理數據存取的安全方式。 移動和客戶端應用程式不應直接連接到數據庫,以避免在客戶端代碼中嵌入數據庫憑證,這會帶來重大安全風險。

  2. 抽象化: API將數據層與用戶介面分離,允許不同的客户端應用程式(移動應用程式、網頁應用程式、桌面應用程式)與同一數據來源交互而不透露數據庫或其憑證。

不同框架中的多功能性

Tim指出API並不限於特定框架或語言。 例如,可以從JavaScript框架如Angular、React或Vue訪問C# API,這展示了API的跨平台能力。

API網頁應用程式代碼審查

在15:21處,Tim Corey開始詳細介紹ASP.NET Core API專案的結構和功能。 下面是他的解釋的要點,在創建API網頁應用程式時,理解這些對於使用HTTP服務器和服務器端技術非常必要:

1. Program.cs概述

Tim回顧Program.cs,指出它構建網頁應用程式並配置服務如控制器和Swagger(OpenAPI)的依賴注入。 代碼在構建及運行應用程式前設置基本服務。

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

2. 環境配置

Tim解釋如何在launchSettings.json中配置環境設置。 默認環境設定為"開發",以便本地測試,啟用Swagger。 在線上環境中,通常為安全起見會禁用Swagger,但可以透過刪除開發檢查來啟用。

{
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

3. HTTPS重定向和控制器

Tim指出HTTPS重定向和控制器的映射。 此設置確保API路由正確配置。 他偏好使用"api"前綴,以便在HTTP請求和響應路由中清晰,這可以修改以確保API路徑區別明顯。

4. 天氣預報控制器

Tim深入探討WeatherForecastController.cs,重點講述路由配置。 默認路由是/weatherforecast,可以修改以包括"api"前綴。 控制器使用HTTP GET檢索數據,可透過指定路由訪問。

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

public class WeatherForecast
{
    public DateTime Date { get; set; }

    public int TemperatureC { get; set; }

    public string? Summary { get; set; }
}
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

public class WeatherForecast
{
    public DateTime Date { get; set; }

    public int TemperatureC { get; set; }

    public string? Summary { get; set; }
}

5. HTTP動詞和路由

Tim解釋HTTP動詞(GET, POST, PUT, DELETE)如何定義API端點。 對於GET請求,瀏覽器會調用控制器中的指定方法。 其他動詞需要工具如Postman進行測試。

創建API控制器

Tim展示了創建API控制器的過程:

  1. 添加控制器: 右鍵點擊"Controllers"文件夾,選擇"Add > Controller"。

  2. 選擇API控制器: 選擇"API Controller - Empty"並為控制器命名。

    添加控制器

  3. 定義動作: 在控制器內實施動作以處理不同的HTTP請求。 Tim提供了如何定義GET, POST, PUT, DELETE方法的代碼示例。 有關詳細代碼,請從26:25開始參考影片。

這種實用示範幫助開發者理解如何構建和配置API控制器以處理各類請求。

REST API

Tim Corey介紹了REST(表現性狀態傳輸)及其原則:

  1. 什麼是REST: REST是一種設計網路應用程式的架構樣式。 它依賴於無狀態通訊,並使用標準HTTP方法(GET, POST, PUT, DELETE)執行操作。

  2. RESTful原則: RESTful API使用URL模式來表示資源。 例如,/users/5檢索具有ID 5的特定用戶。

  3. REST合規性: Tim指出,實現完全REST合規性可能具有挑戰性,因為REST最初是個理論模型。 然而,遵循REST原則可以導致更直觀且一致的API。

Tim強調儘管目標是REST合規,實際考慮因素應引導API設計以確保其可用性和功能性。

極簡API應用程式

Corey介紹了極簡API,這是在ASP.NET Core中的一種流程化API開發方法:

  1. 設置極簡API: Tim展示如何在設置專案時不選擇"Use Controllers"選項,創建極簡API專案。

  2. 簡化代碼: 極簡API消除了對控制器和路由屬性的需求,允許開發者直接在app.MapPost()等方法。

  3. 代碼示例: Tim提供了一個代碼示例,其中一行代碼定義了一個端點。 他展示如何將GET請求映射到端點,配置最簡類。
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

極簡API為小型應用程式或微服務的開發設計。

為何選擇極簡API

Tim討論了極簡API的優勢:

  1. 創建新專案: Tim創建了一個新的Web API專案,但這次在額外資訊中取消選擇使用控制器選項。 這允許創建使用極簡API的項目。

    創建極簡API

  2. 減少樣板代碼: 極簡API透過移除對控制器和額外的路由配置的需求,減少樣板代碼。

  3. 簡單性: 對於簡單的API,它們提供更直接的方法,更易於理解和維護代碼。

  4. 微服務: 在不要求傳統控制器完整功能集的情況下,不需要執行有限的行動的微服務中,極簡API特別有用。

Tim承認,當不同場景中極簡API是有益時,對於更大或更複雜的應用程式,傳統控制器可能更合適。

最佳實踐,總結和最後意見

Tim Corey以API開發中的最佳實踐總結他的教程:

  1. 分離關係: 避免將業務邏輯直接放在Program.cs或控制器動作中。 相反,將邏輯移至單獨的類別庫或服務以保持代碼整潔並遵循SOLID原則。

  2. API做為用戶介面: 把API當作用戶介面,專注於使其直覺和具備良好文件。 Tim強調清晰文檔和有效API設計的重要性。

  3. Swagger和文件: 使用Swagger進行API文檔和版本控制。 Tim解釋如何用代碼中的XML註釋生成詳盡的API文檔。

  4. 其他考慮因素: 考慮快取限制等因素,提升API性能和安全性。

Tim鼓勵開發者探索不同的專案類型和工具,強調理解API及其在現代軟體開發中的角色的價值。

結論

Tim Corey的影片提供了在ASP.NET Core中創建及管理API的詳細指南,涵蓋RESTful及極簡API方法。 他的見解不僅幫助開發者掌握API設計的基本原理,還提供實際的建議來實施有效的解決方案。

欲知更多有關C#及其他專案類型的深入教程和見解,請務必訪問Tim Corey的YouTube頻道IAmTimCorey

Hero Worlddot related to 用ASP.NET Core創建C# Web應用
Hero Affiliate related to 用ASP.NET Core創建C# Web應用

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我