Compartilhar via


Middleware em aplicativos de APIs mínimas

Observação

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

Aviso

Esta versão do ASP.NET Core não tem mais suporte. 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.

Importante

Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.

Para a versão atual, consulte a versão .NET 9 deste artigo.

O WebApplication adiciona automaticamente o seguinte middleware a Minimal API applications, dependendo de determinadas condições:

  • UseDeveloperExceptionPage é adicionado primeiro quando o HostingEnvironment é "Development".
  • UseRouting será 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 será adicionado no final do pipeline de middleware se algum ponto de extremidade estiver configurado.
  • UseAuthentication será adicionado imediatamente após UseRouting se o código do usuário ainda não tiver chamado UseAuthentication e se IAuthenticationSchemeProvider puder ser detectado no provedor de serviços. IAuthenticationSchemeProvider é adicionado por padrão ao usar AddAuthentication, e os serviços são detectados usando IServiceProviderIsService.
  • UseAuthorization será adicionado em seguida se o código do usuário ainda não tiver chamado UseAuthorization e se IAuthorizationHandlerProvider puder ser detectado no provedor de serviços. IAuthorizationHandlerProvider é adicionado por padrão ao usar AddAuthorization, e os serviços são detectados usando IServiceProviderIsService.
  • O middleware e os pontos de extremidade configurados pelo usuário são adicionados entre UseRouting e UseEndpoints.

O código a seguir é de fato aquilo 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 é a correta para o aplicativo e requer modificação. Por exemplo, UseCors deve ser chamado antes de UseAuthentication e de UseAuthorization. O aplicativo precisa chamar UseAuthentication e UseAuthorization se UseCors for chamado:

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

Se o middleware tiver que ser executado antes da correspondência de rotas ocorrer, UseRouting deverá ser chamado e o middleware deverá ser colocado antes da chamada para UseRouting. UseEndpoints não é necessário nesse caso, já que é 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.

O WebApplication adiciona automaticamente o seguinte middleware a Minimal API applications, dependendo de determinadas condições:

  • UseDeveloperExceptionPage é adicionado primeiro quando o HostingEnvironment é "Development".
  • UseRouting será 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 será adicionado no final do pipeline de middleware se algum ponto de extremidade estiver configurado.
  • UseAuthentication será adicionado imediatamente após UseRouting se o código do usuário ainda não tiver chamado UseAuthentication e se IAuthenticationSchemeProvider puder ser detectado no provedor de serviços. IAuthenticationSchemeProvider é adicionado por padrão ao usar AddAuthentication, e os serviços são detectados usando IServiceProviderIsService.
  • UseAuthorization será adicionado em seguida se o código do usuário ainda não tiver chamado UseAuthorization e se IAuthorizationHandlerProvider puder ser detectado no provedor de serviços. IAuthorizationHandlerProvider é adicionado por padrão ao usar AddAuthorization, e os serviços são detectados usando IServiceProviderIsService.
  • O middleware e os pontos de extremidade configurados pelo usuário são adicionados entre UseRouting e UseEndpoints.

O código a seguir é de fato aquilo 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 é a correta para o aplicativo e requer modificação. Por exemplo, UseCors deve ser chamado antes de UseAuthentication e de UseAuthorization. O aplicativo precisa chamar UseAuthentication e UseAuthorization se UseCors for chamado:

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

Se o middleware tiver que ser executado antes da correspondência de rotas ocorrer, UseRouting deverá ser chamado e o middleware deverá ser colocado antes da chamada para UseRouting. UseEndpoints não é necessário nesse caso, já que é 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 Evitar ataques de falsificação de solicitação entre sites (XSRF/CSRF) no ASP.NET Core

Para saber mais sobre middleware, confira ASP.NET Core Middleware e a lista de middleware internos que podem ser adicionados aos aplicativos.

Para obter mais informações sobre as APIs mínimas, confira Minimal APIs overview.