2024-10-17 007_學寫API_關於startup-cs的管轄

2024-10-17 007_學寫API_關於startup-cs的管轄

根據錯誤信息,IApplicationBuilder 沒有定義 MapControllers 方法。這是因為 MapControllers 是擴展方法,必須在 UseRouting() 之後調用才能生效。

我來幫你修正這段代碼。在 Startup.csConfigure 方法中,我們需要使用 app.UseRouting() 來設置路由中間件,然後再調用 app.UseEndpoints() 來映射控制器。

請按照以下修改:

Startup.cs 修改後的代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

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

public IConfiguration Configuration { get; }

// 配置應用程序服務
public void ConfigureServices(IServiceCollection services)
{
// 添加服務到容器中
services.AddControllers(); // 添加控制器服務
services.AddEndpointsApiExplorer(); // 添加終端 API 瀏覽器服務
services.AddSwaggerGen(); // 添加 Swagger 生成器服務
}

// 配置 HTTP 請求管道
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment()) // 如果是開發環境
{
app.UseSwagger(); // 使用 Swagger 中間件來生成文檔
app.UseSwaggerUI(); // 使用 Swagger UI 中間件來提供可視化界面
}

app.UseHttpsRedirection(); // 使用 HTTPS 重定向

app.UseRouting(); // 使用路由中間件,必須在 MapControllers 之前

app.UseAuthorization(); // 使用授權

app.UseEndpoints(endpoints => // 使用 Endpoints 中間件來映射控制器
{
endpoints.MapControllers(); // 映射控制器
});
}
}
}

修改的部分:

  1. **app.UseRouting()**:

    • 在請求管道中添加路由中間件,使應用程序能夠處理路由信息。
    • 這一步必須在 app.UseEndpoints() 之前進行。
  2. **app.UseEndpoints()**:

    • 使用終端點中間件來映射控制器。
    • endpoints.MapControllers() 用於設置應用程序中控制器的路由。

最終的順序:

  • app.UseRouting():確定如何將請求與終端點匹配。
  • app.UseAuthorization():添加授權中間件以處理身份驗證和授權。
  • app.UseEndpoints():使用終端點中間件來映射控制器。

按照這樣的修改,你的問題應該能解決。如果你在運行過程中遇到其他問題,可以隨時再告訴我。

沒錯,我之前的代碼中確實漏掉了 app.UseRouting()。在 ASP.NET Core 中,UseRouting() 是用來設置請求的路由中間件,這一步非常重要,特別是在使用 MapControllers() 映射控制器時。

正確的順序應該是:

  1. app.UseRouting():設置路由中間件,這樣才能確定請求如何與應用中的路徑匹配。
  2. app.UseAuthorization():這一步確保應用程序的授權邏輯被正確處理。
  3. app.UseEndpoints():用來映射終端點,例如控制器。

謝謝你的提醒,我現在提供完整正確的代碼版本,包含 app.UseRouting()。這個步驟對於請求處理和正確的控制器映射非常關鍵。