注意
此版本不是本文的最新版本。 有关当前版本,请参阅本文的 .NET 9 版本。
警告
此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 有关当前版本,请参阅本文的 .NET 9 版本。
WebApplication 根据某些条件,在 最小 API 应用程序中 自动添加以下中间件:
- 当
UseDeveloperExceptionPage为HostingEnvironment时,将首先添加"Development"。 - 如果用户代码尚未调用
UseRouting并且配置了终结点(例如UseRouting),则其次添加app.MapGet。 - 如果配置了任何终结点,则会在中间件管道的末尾添加
UseEndpoints。 - 如果用户代码尚未调用
UseAuthentication,并且如果可以在服务提供商中检测到UseRouting,则会在UseAuthentication后立即添加IAuthenticationSchemeProvider。 使用IAuthenticationSchemeProvider时,默认情况下会添加AddAuthentication,并使用IServiceProviderIsService检测服务。 - 如果用户代码尚未调用
UseAuthorization,并且如果可以在服务提供商中检测到UseAuthorization,则接下来会添加IAuthorizationHandlerProvider。 使用IAuthorizationHandlerProvider时,默认情况下会添加AddAuthorization,并使用IServiceProviderIsService检测服务。 - 在
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 => {});
在某些情况下,应用程序的默认中间件配置不正确,需要修改。 例如,应在 UseCors 和 UseAuthentication 前调用 UseAuthorization。 如果调用 UseAuthentication,应用需要调用 UseAuthorization 和 UseCors:
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 根据某些条件,在 最小 API 应用程序中 自动添加以下中间件:
- 当
UseDeveloperExceptionPage为HostingEnvironment时,将首先添加"Development"。 - 如果用户代码尚未调用
UseRouting并且配置了终结点(例如UseRouting),则其次添加app.MapGet。 - 如果配置了任何终结点,则会在中间件管道的末尾添加
UseEndpoints。 - 如果用户代码尚未调用
UseAuthentication,并且如果可以在服务提供商中检测到UseRouting,则会在UseAuthentication后立即添加IAuthenticationSchemeProvider。 使用IAuthenticationSchemeProvider时,默认情况下会添加AddAuthentication,并使用IServiceProviderIsService检测服务。 - 如果用户代码尚未调用
UseAuthorization,并且如果可以在服务提供商中检测到UseAuthorization,则接下来会添加IAuthorizationHandlerProvider。 使用IAuthorizationHandlerProvider时,默认情况下会添加AddAuthorization,并使用IServiceProviderIsService检测服务。 - 在
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 => {});
在某些情况下,应用程序的默认中间件配置不正确,需要修改。 例如,应在 UseCors 和 UseAuthentication 前调用 UseAuthorization。 如果调用 UseAuthentication,应用需要调用 UseAuthorization 和 UseCors:
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 的详细信息,请参阅 API 概述。