Compartir a través de


Middleware en aplicaciones de API mínimas

Nota:

Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión de .NET 9 de este artículo.

Advertencia

Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulta la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulta la versión .NET 8 de este artículo.

Importante

Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.

Para la versión actual, consulte la versión de .NET 9 de este artículo.

WebApplication agrega automáticamente el siguiente middleware en Minimal API applications en función de determinadas condiciones:

  • UseDeveloperExceptionPage se agrega primero cuando HostingEnvironment es "Development".
  • UseRouting se agrega en segundo lugar si el código de usuario aún no llamó UseRouting a y si hay puntos de conexión configurados, por ejemplo app.MapGet.
  • UseEndpoints se agrega al final de la canalización de middleware si hay algún punto de conexión configurado.
  • UseAuthentication se agrega inmediatamente después de UseRouting si el código de usuario no llamó aún a UseAuthentication y si IAuthenticationSchemeProvider se puede detectar en el proveedor de servicios. IAuthenticationSchemeProvider se agrega de forma predeterminada cuando se usa AddAuthentication, y los servicios se detectan mediante IServiceProviderIsService.
  • UseAuthorization se agrega a continuación si el código de usuario no llamó aún a UseAuthorization y si IAuthorizationHandlerProvider se puede detectar en el proveedor de servicios. IAuthorizationHandlerProvider se agrega de forma predeterminada cuando se usa AddAuthorization, y los servicios se detectan mediante IServiceProviderIsService.
  • El middleware y los puntos de conexión configurados por el usuario se agregan entre UseRouting y UseEndpoints.

El código siguiente es eficazmente lo que produce el middleware automático que se agrega a la aplicación:

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

En algunos casos, la configuración predeterminada del middleware no es correcta para la aplicación y requiere modificación. Por ejemplo, UseCors se debe llamar a antes UseAuthentication de y UseAuthorization. La aplicación debe llamar a UseAuthentication y UseAuthorization si se llama a UseCors:

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

Si se debe ejecutar el middleware antes de que se produzca la coincidencia de rutas, se debe llamar a UseRouting y se debe colocar el middleware antes de la llamada a UseRouting. UseEndpoints no es necesario en este caso, ya que se agrega automáticamente como se ha descrito anteriormente:

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

app.UseRouting();

// other middleware and endpoints

Al agregar un middleware de terminal:

  • El middleware debe agregarse después de UseEndpoints.
  • La aplicación debe llamar UseRouting a y UseEndpoints para que el middleware de terminal se pueda colocar en la ubicación correcta.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

El middleware de terminal es un middleware que se ejecuta si ningún punto de conexión controla la solicitud.

WebApplication agrega automáticamente el siguiente middleware en Minimal API applications en función de determinadas condiciones:

  • UseDeveloperExceptionPage se agrega primero cuando HostingEnvironment es "Development".
  • UseRouting se agrega en segundo lugar si el código de usuario aún no llamó UseRouting a y si hay puntos de conexión configurados, por ejemplo app.MapGet.
  • UseEndpoints se agrega al final de la canalización de middleware si hay algún punto de conexión configurado.
  • UseAuthentication se agrega inmediatamente después de UseRouting si el código de usuario no llamó aún a UseAuthentication y si IAuthenticationSchemeProvider se puede detectar en el proveedor de servicios. IAuthenticationSchemeProvider se agrega de forma predeterminada cuando se usa AddAuthentication, y los servicios se detectan mediante IServiceProviderIsService.
  • UseAuthorization se agrega a continuación si el código de usuario no llamó aún a UseAuthorization y si IAuthorizationHandlerProvider se puede detectar en el proveedor de servicios. IAuthorizationHandlerProvider se agrega de forma predeterminada cuando se usa AddAuthorization, y los servicios se detectan mediante IServiceProviderIsService.
  • El middleware y los puntos de conexión configurados por el usuario se agregan entre UseRouting y UseEndpoints.

El código siguiente es eficazmente lo que produce el middleware automático que se agrega a la aplicación:

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

En algunos casos, la configuración predeterminada del middleware no es correcta para la aplicación y requiere modificación. Por ejemplo, UseCors se debe llamar a antes UseAuthentication de y UseAuthorization. La aplicación debe llamar a UseAuthentication y UseAuthorization si se llama a UseCors:

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

Si se debe ejecutar el middleware antes de que se produzca la coincidencia de rutas, se debe llamar a UseRouting y se debe colocar el middleware antes de la llamada a UseRouting. UseEndpoints no es necesario en este caso, ya que se agrega automáticamente como se ha descrito anteriormente:

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

app.UseRouting();

// other middleware and endpoints

Al agregar un middleware de terminal:

  • El middleware debe agregarse después de UseEndpoints.
  • La aplicación debe llamar UseRouting a y UseEndpoints para que el middleware de terminal se pueda colocar en la ubicación correcta.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

El middleware de terminal es un middleware que se ejecuta si ningún punto de conexión controla la solicitud.

Para obtener información sobre el middleware antifalsificación en las API mínimas, consulte Evitar ataques de falsificación de solicitudes entre sitios (XSRF/CSRF) en ASP.NET Core

Para obtener más información sobre el middleware, consulte Middleware de ASP.NET Core y la lista de middleware integrados que se pueden agregar a las aplicaciones.

Para más información sobre las API mínimas, consulte Minimal APIs overview.