基本 API 應用程式中的中介軟體
注意
這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。
WebApplication
會根據特定條件,在 Minimal API applications
中自動新增下列中介軟體:
- 當
HostingEnvironment
是"Development"
,會先新增UseDeveloperExceptionPage
。 - 如果使用者程式碼尚未呼叫
UseRouting
,且已設定端點 (例如app.MapGet
),則會接著新增UseRouting
。 - 如果已設定任何端點,則會在中介軟體管線的結尾新增
UseEndpoints
。 - 如果使用者程式碼尚未呼叫
UseAuthentication
,且如果可以在服務提供者中偵測到IAuthenticationSchemeProvider
,則會在UseRouting
之後立即新增UseAuthentication
。 使用AddAuthentication
時,且使用IServiceProviderIsService
偵測到服務,預設會新增IAuthenticationSchemeProvider
。 - 如果使用者程式碼尚未呼叫
UseAuthorization
,且如果可以在服務提供者中偵測到IAuthorizationHandlerProvider
,則會接著新增UseAuthorization
。 使用AddAuthorization
時,且使用IServiceProviderIsService
偵測到服務,預設會新增IAuthorizationHandlerProvider
。 - 使用者設定的中介軟體和端點會在
UseRouting
和UseEndpoints
之間新增。
下列程式碼實際上是將自動中介軟體新增至應用程式所產生的內容:
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
在某些情況下,應用程式的預設中介軟體設定不正確,而且需要修改。 例如,應該在 UseAuthentication 和 UseAuthorization 之前呼叫 UseCors。 如果呼叫 UseCors
,則應用程式需要呼叫 UseAuthentication
和 UseAuthorization
:
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
如果中介軟體應在路由比對發生之前執行,則應該呼叫 UseRouting,而且中介軟體應該放在對 UseRouting
的呼叫之前。 UseEndpoints 在此案例中並非必要項目,因為它會如先前所述自動新增:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
新增終端中介軟體時:
- 中介軟體必須在
UseEndpoints
之後新增。 - 應用程式必須呼叫
UseRouting
和UseEndpoints
,讓終端中介軟體可以放在正確的位置。
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
終端中介軟體是會在沒有可處理要求的端點時執行的中介軟體。
WebApplication
會根據特定條件,在 Minimal API applications
中自動新增下列中介軟體:
- 當
HostingEnvironment
是"Development"
,會先新增UseDeveloperExceptionPage
。 - 如果使用者程式碼尚未呼叫
UseRouting
,且已設定端點 (例如app.MapGet
),則會接著新增UseRouting
。 - 如果已設定任何端點,則會在中介軟體管線的結尾新增
UseEndpoints
。 - 如果使用者程式碼尚未呼叫
UseAuthentication
,且如果可以在服務提供者中偵測到IAuthenticationSchemeProvider
,則會在UseRouting
之後立即新增UseAuthentication
。 使用AddAuthentication
時,且使用IServiceProviderIsService
偵測到服務,預設會新增IAuthenticationSchemeProvider
。 - 如果使用者程式碼尚未呼叫
UseAuthorization
,且如果可以在服務提供者中偵測到IAuthorizationHandlerProvider
,則會接著新增UseAuthorization
。 使用AddAuthorization
時,且使用IServiceProviderIsService
偵測到服務,預設會新增IAuthorizationHandlerProvider
。 - 使用者設定的中介軟體和端點會在
UseRouting
和UseEndpoints
之間新增。
下列程式碼實際上是將自動中介軟體新增至應用程式所產生的內容:
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
在某些情況下,應用程式的預設中介軟體設定不正確,而且需要修改。 例如,應該在 UseAuthentication 和 UseAuthorization 之前呼叫 UseCors。 如果呼叫 UseCors
,則應用程式需要呼叫 UseAuthentication
和 UseAuthorization
:
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
如果中介軟體應在路由比對發生之前執行,則應該呼叫 UseRouting,而且中介軟體應該放在對 UseRouting
的呼叫之前。 UseEndpoints 在此案例中並非必要項目,因為它會如先前所述自動新增:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
新增終端中介軟體時:
- 中介軟體必須在
UseEndpoints
之後新增。 - 應用程式必須呼叫
UseRouting
和UseEndpoints
,讓終端中介軟體可以放在正確的位置。
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
終端中介軟體是會在沒有可處理要求的端點時執行的中介軟體。
如需最小 API 中的防偽中介軟體的資訊,請參閱防止 ASP.NET Core 中的跨網站偽造要求 (XSRF/CSRF) 攻擊
如需中介軟體的詳細資訊,請參閱 ASP.NET Core 中介軟體,以及可新增至應用程式的內建中介軟體清單。
如需最低限度 API 的詳細資訊,請參閱 Minimal APIs overview
。