Middleware in Minimal-API-Apps
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
WebApplication
fügt Minimal API applications
abhängig von bestimmten Bedingungen automatisch die folgende Middleware hinzu:
UseDeveloperExceptionPage
wird zuerst hinzugefügt, wennHostingEnvironment
gleich"Development"
ist.UseRouting
wird zweitens hinzugefügt, wenn der BenutzercodeUseRouting
noch nicht aufgerufen hat, und wenn Endpunkte konfiguriert sind, z. B.app.MapGet
.UseEndpoints
wird am Ende der Middlewarepipeline hinzugefügt, wenn Endpunkte konfiguriert sind.UseAuthentication
wird unmittelbar nachUseRouting
hinzugefügt, wenn der BenutzercodeUseAuthentication
noch nicht aufgerufen hat und wennIAuthenticationSchemeProvider
im Dienstanbieter erkannt werden kann.IAuthenticationSchemeProvider
wird standardmäßig hinzugefügt, wenn die VerwendungAddAuthentication
von Diensten mitIServiceProviderIsService
erkannt wird.UseAuthorization
wird als Nächstes hinzugefügt, wenn der BenutzercodeUseAuthorization
noch nicht aufgerufen hat und wennIAuthorizationHandlerProvider
im Dienstanbieter erkannt werden kann.IAuthorizationHandlerProvider
wird standardmäßig hinzugefügt, wennAddAuthorization
verwendet wird, und Dienste mitIServiceProviderIsService
erkannt werden.- Benutzerkonfigurierte Middleware und Endpunkte werden zwischen
UseRouting
undUseEndpoints
hinzugefügt.
Nachfolgend sehen Sie den Code, der von der automatischen Middleware erzeugt wird, die zur App hinzugefügt wird:
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 => {});
In einigen Fällen eignet sich die standardmäßige Middleware-Konfiguration nicht für die App und muss geändert werden. Beispielsweise sollte UseCors vor UseAuthentication und UseAuthorization aufgerufen werden. Die App muss UseAuthentication
und UseAuthorization
aufrufen, wenn UseCors
aufgerufen wird:
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Wenn Middleware ausgeführt werden muss, bevor der Routenabgleich erfolgt, muss UseRouting aufgerufen werden, und die Middleware muss vor dem Aufruf von UseRouting
platziert werden. UseEndpoints ist in diesem Fall nicht erforderlich, da es wie zuvor beschrieben automatisch hinzugefügt wird:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
Beim Hinzufügen einer Terminal-Middleware:
- Die Middleware muss nach
UseEndpoints
hinzugefügt werden. - Die App muss
UseRouting
undUseEndpoints
aufrufen, damit die Terminal-Middleware an der richtigen Position platziert werden kann.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
Terminal-Middleware ist Middleware, die ausgeführt wird, wenn kein Endpunkt die Anforderung verarbeitet.
WebApplication
fügt Minimal API applications
abhängig von bestimmten Bedingungen automatisch die folgende Middleware hinzu:
UseDeveloperExceptionPage
wird zuerst hinzugefügt, wennHostingEnvironment
gleich"Development"
ist.UseRouting
wird zweitens hinzugefügt, wenn der BenutzercodeUseRouting
noch nicht aufgerufen hat, und wenn Endpunkte konfiguriert sind, z. B.app.MapGet
.UseEndpoints
wird am Ende der Middlewarepipeline hinzugefügt, wenn Endpunkte konfiguriert sind.UseAuthentication
wird unmittelbar nachUseRouting
hinzugefügt, wenn der BenutzercodeUseAuthentication
noch nicht aufgerufen hat und wennIAuthenticationSchemeProvider
im Dienstanbieter erkannt werden kann.IAuthenticationSchemeProvider
wird standardmäßig hinzugefügt, wenn die VerwendungAddAuthentication
von Diensten mitIServiceProviderIsService
erkannt wird.UseAuthorization
wird als Nächstes hinzugefügt, wenn der BenutzercodeUseAuthorization
noch nicht aufgerufen hat und wennIAuthorizationHandlerProvider
im Dienstanbieter erkannt werden kann.IAuthorizationHandlerProvider
wird standardmäßig hinzugefügt, wennAddAuthorization
verwendet wird, und Dienste mitIServiceProviderIsService
erkannt werden.- Benutzerkonfigurierte Middleware und Endpunkte werden zwischen
UseRouting
undUseEndpoints
hinzugefügt.
Nachfolgend sehen Sie den Code, der von der automatischen Middleware erzeugt wird, die zur App hinzugefügt wird:
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 => {});
In einigen Fällen eignet sich die standardmäßige Middleware-Konfiguration nicht für die App und muss geändert werden. Beispielsweise sollte UseCors vor UseAuthentication und UseAuthorization aufgerufen werden. Die App muss UseAuthentication
und UseAuthorization
aufrufen, wenn UseCors
aufgerufen wird:
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Wenn Middleware ausgeführt werden muss, bevor der Routenabgleich erfolgt, muss UseRouting aufgerufen werden, und die Middleware muss vor dem Aufruf von UseRouting
platziert werden. UseEndpoints ist in diesem Fall nicht erforderlich, da es wie zuvor beschrieben automatisch hinzugefügt wird:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
Beim Hinzufügen einer Terminal-Middleware:
- Die Middleware muss nach
UseEndpoints
hinzugefügt werden. - Die App muss
UseRouting
undUseEndpoints
aufrufen, damit die Terminal-Middleware an der richtigen Position platziert werden kann.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
Terminal-Middleware ist Middleware, die ausgeführt wird, wenn kein Endpunkt die Anforderung verarbeitet.
Informationen über fälschungssichere Middleware in Minimal APIs finden Sie unter Verhindern von Cross-Site Request Forgery (XSRF/CSRF) Angriffen in ASP.NET Core.
Weitere Informationen zu Middleware finden Sie unter ASP.NET Core Middleware und der Liste der integrierten Middleware, die Anwendungen hinzugefügt werden kann.
Weitere Informationen zu Minimal-APIs finden Sie unter Minimal APIs overview
.