用ASP.NET Core創建C# Web應用
建立網頁應用程式是現代開發者的一項基本技能,理解底層的專案結構是至關重要的。 這篇文章靈感來自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專案。 以下是他的影片中描述的步驟:
-
打開Visual Studio: 從Visual Studio安裝程式開始,選擇建立新專案的選項。

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

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

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

- 創建專案: 點擊"創建"以生成具有默認配置和必要代碼的專案。
此設置為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在用戶介面和底層數據之間充當中介,提供安全且高效的數據存取方式。 此集中式管理因多個原因至關重要:
-
安全性: API提供管理數據存取的安全方式。 移動和客戶端應用程式不應直接連接到數據庫,以避免在客戶端代碼中嵌入數據庫憑證,這會帶來重大安全風險。
- 抽象化: 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控制器的過程:
-
添加控制器: 右鍵點擊"Controllers"文件夾,選擇"Add > Controller"。
-
選擇API控制器: 選擇"API Controller - Empty"並為控制器命名。

- 定義動作: 在控制器內實施動作以處理不同的HTTP請求。 Tim提供了如何定義GET, POST, PUT, DELETE方法的代碼示例。 有關詳細代碼,請從26:25開始參考影片。
這種實用示範幫助開發者理解如何構建和配置API控制器以處理各類請求。
REST API
Tim Corey介紹了REST(表現性狀態傳輸)及其原則:
-
什麼是REST: REST是一種設計網路應用程式的架構樣式。 它依賴於無狀態通訊,並使用標準HTTP方法(GET, POST, PUT, DELETE)執行操作。
-
RESTful原則: RESTful API使用URL模式來表示資源。 例如,
/users/5檢索具有ID 5的特定用戶。 - REST合規性: Tim指出,實現完全REST合規性可能具有挑戰性,因為REST最初是個理論模型。 然而,遵循REST原則可以導致更直觀且一致的API。
Tim強調儘管目標是REST合規,實際考慮因素應引導API設計以確保其可用性和功能性。
極簡API應用程式
Corey介紹了極簡API,這是在ASP.NET Core中的一種流程化API開發方法:
-
設置極簡API: Tim展示如何在設置專案時不選擇"Use Controllers"選項,創建極簡API專案。
-
簡化代碼: 極簡API消除了對控制器和路由屬性的需求,允許開發者直接在
app.MapPost()等方法。 - 代碼示例: 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的優勢:
-
創建新專案: Tim創建了一個新的Web API專案,但這次在額外資訊中取消選擇使用控制器選項。 這允許創建使用極簡API的項目。

-
減少樣板代碼: 極簡API透過移除對控制器和額外的路由配置的需求,減少樣板代碼。
-
簡單性: 對於簡單的API,它們提供更直接的方法,更易於理解和維護代碼。
- 微服務: 在不要求傳統控制器完整功能集的情況下,不需要執行有限的行動的微服務中,極簡API特別有用。
Tim承認,當不同場景中極簡API是有益時,對於更大或更複雜的應用程式,傳統控制器可能更合適。
最佳實踐,總結和最後意見
Tim Corey以API開發中的最佳實踐總結他的教程:
-
分離關係: 避免將業務邏輯直接放在
Program.cs或控制器動作中。 相反,將邏輯移至單獨的類別庫或服務以保持代碼整潔並遵循SOLID原則。 -
API做為用戶介面: 把API當作用戶介面,專注於使其直覺和具備良好文件。 Tim強調清晰文檔和有效API設計的重要性。
-
Swagger和文件: 使用Swagger進行API文檔和版本控制。 Tim解釋如何用代碼中的XML註釋生成詳盡的API文檔。
- 其他考慮因素: 考慮快取限制等因素,提升API性能和安全性。
Tim鼓勵開發者探索不同的專案類型和工具,強調理解API及其在現代軟體開發中的角色的價值。
結論
Tim Corey的影片提供了在ASP.NET Core中創建及管理API的詳細指南,涵蓋RESTful及極簡API方法。 他的見解不僅幫助開發者掌握API設計的基本原理,還提供實際的建議來實施有效的解決方案。
欲知更多有關C#及其他專案類型的深入教程和見解,請務必訪問Tim Corey的YouTube頻道IAmTimCorey。

