最小 API 应用中的中间件

注意

此版本不是本文的最新版本。 有关当前版本,请参阅本文.NET 9 版本。

警告

此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 有关当前版本,请参阅本文.NET 9 版本。

重要

此信息与预发布产品相关,相应产品在商业发布之前可能会进行重大修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。

有关当前版本,请参阅本文.NET 9 版本。

根据某些条件,WebApplication 会自动在 Minimal API applications 中添加以下中间件:

以下代码实际上是添加到应用程序的自动中间件生成的代码:

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 => {});

在某些情况下,应用程序的默认中间件配置不正确,需要修改。 例如,应在 UseAuthenticationUseAuthorization 前调用 UseCors。 如果调用 UseCors,应用需要调用 UseAuthenticationUseAuthorization

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

如果在路由匹配发生前应运行中间件,则应调用 UseRouting,并且应在调用 UseRouting 之前放置中间件。 在这种情况下,不需要 UseEndpoints,因为它会自动添加,如上所述:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

添加终端中间件时:

  • 必须在 UseEndpoints 后添加中间件。
  • 应用需要调用 UseRoutingUseEndpoints,以便终端中间件可以放置在正确的位置。
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

在没有终结点处理请求时运行的中间件。

根据某些条件,WebApplication 会自动在 Minimal API applications 中添加以下中间件:

以下代码实际上是添加到应用程序的自动中间件生成的代码:

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 => {});

在某些情况下,应用程序的默认中间件配置不正确,需要修改。 例如,应在 UseAuthenticationUseAuthorization 前调用 UseCors。 如果调用 UseCors,应用需要调用 UseAuthenticationUseAuthorization

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

如果在路由匹配发生前应运行中间件,则应调用 UseRouting,并且应在调用 UseRouting 之前放置中间件。 在这种情况下,不需要 UseEndpoints,因为它会自动添加,如上所述:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

添加终端中间件时:

  • 必须在 UseEndpoints 后添加中间件。
  • 应用需要调用 UseRoutingUseEndpoints,以便终端中间件可以放置在正确的位置。
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