2024-10-13 003_學寫API_啟用控制器路由_app_MapControllers()

2024-10-13 003_學寫API_啟用控制器路由_app_MapControllers()

是的,app.MapControllers() 這行代碼的作用是將你寫的所有控制器類與相應的 HTTP 請求路由關聯起來,也就是映射到你的控制器。

具體來說:

  • MapControllers() 是一個簡便的方法,用於啟用屬於 ASP.NET Core MVC 應用中的控制器路由。
  • 它會自動掃描應用程序中的控制器(通常位於 Controllers 文件夾下的 .cs 文件)。
  • 每個控制器根據其上的路由屬性(例如 [Route("api/[controller]")])來匹配到相應的 URL 路徑。
  • 當有 HTTP 請求發送到對應的 URL 時,ASP.NET Core 會將這個請求映射到對應的控制器和動作方法來處理。

例如,在你的 PackageController 中,你可能有這樣的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Route("api/[controller]")]
[ApiController]
public class PackageController : ControllerBase
{
// GET: api/Package
[HttpGet]
public ActionResult<IEnumerable<Package>> GetAllPackages()
{
// 處理 GET 請求的邏輯
}

// POST: api/Package
[HttpPost]
public ActionResult<Package> CreatePackage([FromBody] Package newPackage)
{
// 處理 POST 請求的邏輯
}
}

MapControllers() 的作用:

當你在 Program.cs 中調用 app.MapControllers() 時:

  1. ASP.NET Core 會掃描應用中的所有控制器類(如 PackageController)。
  2. 根據控制器類和其方法的路由屬性(例如 [Route("api/[controller]")][HttpGet]),將對應的 URL 路由映射到這些控制器和動作方法上。
  3. 當請求到達 /api/Package,它會找到 PackageController 中的相應方法進行處理。

舉個例子:

如果你有以下 HTTP 請求:

  • GET 請求/api/Package,ASP.NET Core 會映射到 PackageController 中的 GetAllPackages() 方法。
  • POST 請求/api/Package,它會映射到 PackageController 中的 CreatePackage() 方法。

app.MapControllers() 的作用就是將這些控制器方法與請求 URL 進行映射,從而讓你的應用程序知道如何處理不同的 HTTP 請求。