Partilhar via


Middleware em aplicativos de API mínima

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.

Advertência

Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.

WebApplication adiciona automaticamente o seguinte middleware em aplicativos de API mínima, dependendo de determinadas condições:

  • UseDeveloperExceptionPage é adicionado primeiro quando o HostingEnvironment é "Development".
  • UseRouting é adicionado em segundo se o código do usuário ainda não tiver chamado UseRouting e se houver pontos de extremidade configurados, por exemplo app.MapGet.
  • UseEndpoints é adicionado no final do pipeline de middleware se algum ponto de extremidade estiver configurado.
  • UseAuthentication é adicionado imediatamente após UseRouting se o código do usuário ainda não tiver sido chamado UseAuthentication e se IAuthenticationSchemeProvider puder ser detetado no provedor de serviços. IAuthenticationSchemeProvider é adicionado por padrão ao usar AddAuthenticationo , e os serviços são detetados usando IServiceProviderIsServiceo .
  • UseAuthorization é adicionado em seguida se o código do usuário ainda não tiver chamado UseAuthorization e se IAuthorizationHandlerProvider puder ser detetado no provedor de serviços. IAuthorizationHandlerProvider é adicionado por padrão ao usar AddAuthorizationo , e os serviços são detetados usando IServiceProviderIsServiceo .
  • O middleware e os pontos de extremidade configurados pelo usuário são adicionados entre UseRouting e UseEndpoints.

O código a seguir é efetivamente o que o middleware automático que está sendo adicionado ao aplicativo produz:

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

Em alguns casos, a configuração de middleware padrão não está correta para o aplicativo e requer modificação. Por exemplo, UseCors deve ser chamado antes UseAuthentication e UseAuthorization. O aplicativo precisa chamar UseAuthentication e UseAuthorization se UseCors é chamado:

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

Se o middleware deve ser executado antes da correspondência de rota ocorrer, UseRouting deve ser chamado e o middleware deve ser colocado antes da chamada para UseRouting. UseEndpoints não é necessário neste caso, pois é adicionado automaticamente conforme descrito anteriormente:

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

app.UseRouting();

// other middleware and endpoints

Ao adicionar um middleware de terminal:

  • O middleware deve ser adicionado após UseEndpoints.
  • O aplicativo precisa chamar UseRouting e UseEndpoints para que o middleware do terminal possa ser colocado no local correto.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

O middleware de terminal é um middleware que é executado se nenhum ponto de extremidade lidar com a solicitação.

WebApplication adiciona automaticamente o seguinte middleware em aplicativos de API mínima, dependendo de determinadas condições:

  • UseDeveloperExceptionPage é adicionado primeiro quando o HostingEnvironment é "Development".
  • UseRouting é adicionado em segundo se o código do usuário ainda não tiver chamado UseRouting e se houver pontos de extremidade configurados, por exemplo app.MapGet.
  • UseEndpoints é adicionado no final do pipeline de middleware se algum ponto de extremidade estiver configurado.
  • UseAuthentication é adicionado imediatamente após UseRouting se o código do usuário ainda não tiver sido chamado UseAuthentication e se IAuthenticationSchemeProvider puder ser detetado no provedor de serviços. IAuthenticationSchemeProvider é adicionado por padrão ao usar AddAuthenticationo , e os serviços são detetados usando IServiceProviderIsServiceo .
  • UseAuthorization é adicionado em seguida se o código do usuário ainda não tiver chamado UseAuthorization e se IAuthorizationHandlerProvider puder ser detetado no provedor de serviços. IAuthorizationHandlerProvider é adicionado por padrão ao usar AddAuthorizationo , e os serviços são detetados usando IServiceProviderIsServiceo .
  • O middleware e os pontos de extremidade configurados pelo usuário são adicionados entre UseRouting e UseEndpoints.

O código a seguir é efetivamente o que o middleware automático que está sendo adicionado ao aplicativo produz:

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

Em alguns casos, a configuração de middleware padrão não está correta para o aplicativo e requer modificação. Por exemplo, UseCors deve ser chamado antes UseAuthentication e UseAuthorization. O aplicativo precisa chamar UseAuthentication e UseAuthorization se UseCors é chamado:

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

Se o middleware deve ser executado antes da correspondência de rota ocorrer, UseRouting deve ser chamado e o middleware deve ser colocado antes da chamada para UseRouting. UseEndpoints não é necessário neste caso, pois é adicionado automaticamente conforme descrito anteriormente:

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

app.UseRouting();

// other middleware and endpoints

Ao adicionar um middleware de terminal:

  • O middleware deve ser adicionado após UseEndpoints.
  • O aplicativo precisa chamar UseRouting e UseEndpoints para que o middleware do terminal possa ser colocado no local correto.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

O middleware de terminal é um middleware que é executado se nenhum ponto de extremidade lidar com a solicitação.

Para obter informações sobre middleware antifalsificação em APIs mínimas, consulte Prevenir ataques de falsificação de solicitação entre sites (XSRF/CSRF) no ASP.NET Core

Para obter mais informações sobre middleware, consulte ASP.NET Core Middleware e a lista de middleware interno que podem ser adicionados a aplicativos.

Para obter mais informações sobre APIs mínimas, consulte Visão geral de APIs.