Sdílet prostřednictvím


Middleware v minimálních aplikacích API

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

WebApplication automaticky přidá následující middleware v aplikacích s minimálním rozhraním API v závislosti na určitých podmínkách:

  • UseDeveloperExceptionPageje přidána jako první, pokud je HostingEnvironment."Development"
  • UseRouting se přidá sekundu, pokud se kód uživatele ještě nevolal UseRouting a pokud jsou nakonfigurované koncové body, například app.MapGet.
  • UseEndpoints se přidá na konec kanálu middlewaru, pokud jsou nakonfigurované nějaké koncové body.
  • UseAuthentication se přidá okamžitě po UseRouting tom, co uživatelský kód ještě nezavolal UseAuthentication a pokud IAuthenticationSchemeProvider je možné ho zjistit v poskytovateli služeb. IAuthenticationSchemeProvider je přidána ve výchozím nastavení při použití AddAuthenticationa služby jsou zjištěny pomocí IServiceProviderIsService.
  • UseAuthorization se přidá dál, pokud kód uživatele ještě nezavolal UseAuthorization a pokud IAuthorizationHandlerProvider je možné ho zjistit v poskytovateli služeb. IAuthorizationHandlerProvider je přidána ve výchozím nastavení při použití AddAuthorizationa služby jsou zjištěny pomocí IServiceProviderIsService.
  • Mezi uživatelem nakonfigurovaný middleware a koncové body se přidají mezi UseRouting a UseEndpoints.

Následující kód je v podstatě to, co automatický middleware přidaný do aplikace vytvoří:

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

V některých případech není výchozí konfigurace middlewaru pro aplikaci správná a vyžaduje úpravy. Například UseCors by mělo být volána před UseAuthentication a UseAuthorization. Aplikace musí volat UseAuthentication a UseAuthorization pokud UseCors se volá:

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

Pokud by se měl middleware spustit před výskytem párování tras, UseRouting měl by být volána a middleware by měl být umístěn před voláním UseRouting. UseEndpoints v tomto případě se nevyžaduje, protože se automaticky přidá, jak je popsáno výše:

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

app.UseRouting();

// other middleware and endpoints

Při přidávání middlewaru terminálu:

  • Middleware musí být přidán za UseEndpoints.
  • Aplikace musí volat UseRouting , UseEndpoints aby middleware terminálu mohl být umístěn ve správném umístění.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Middleware terminálu je middleware, který se spustí, pokud požadavek nezpracuje žádný koncový bod.

WebApplication automaticky přidá následující middleware v aplikacích s minimálním rozhraním API v závislosti na určitých podmínkách:

  • UseDeveloperExceptionPageje přidána jako první, pokud je HostingEnvironment."Development"
  • UseRouting se přidá sekundu, pokud se kód uživatele ještě nevolal UseRouting a pokud jsou nakonfigurované koncové body, například app.MapGet.
  • UseEndpoints se přidá na konec kanálu middlewaru, pokud jsou nakonfigurované nějaké koncové body.
  • UseAuthentication se přidá okamžitě po UseRouting tom, co uživatelský kód ještě nezavolal UseAuthentication a pokud IAuthenticationSchemeProvider je možné ho zjistit v poskytovateli služeb. IAuthenticationSchemeProvider je přidána ve výchozím nastavení při použití AddAuthenticationa služby jsou zjištěny pomocí IServiceProviderIsService.
  • UseAuthorization se přidá dál, pokud kód uživatele ještě nezavolal UseAuthorization a pokud IAuthorizationHandlerProvider je možné ho zjistit v poskytovateli služeb. IAuthorizationHandlerProvider je přidána ve výchozím nastavení při použití AddAuthorizationa služby jsou zjištěny pomocí IServiceProviderIsService.
  • Mezi uživatelem nakonfigurovaný middleware a koncové body se přidají mezi UseRouting a UseEndpoints.

Následující kód je v podstatě to, co automatický middleware přidaný do aplikace vytvoří:

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

V některých případech není výchozí konfigurace middlewaru pro aplikaci správná a vyžaduje úpravy. Například UseCors by mělo být volána před UseAuthentication a UseAuthorization. Aplikace musí volat UseAuthentication a UseAuthorization pokud UseCors se volá:

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

Pokud by se měl middleware spustit před výskytem párování tras, UseRouting měl by být volána a middleware by měl být umístěn před voláním UseRouting. UseEndpoints v tomto případě se nevyžaduje, protože se automaticky přidá, jak je popsáno výše:

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

app.UseRouting();

// other middleware and endpoints

Při přidávání middlewaru terminálu:

  • Middleware musí být přidán za UseEndpoints.
  • Aplikace musí volat UseRouting , UseEndpoints aby middleware terminálu mohl být umístěn ve správném umístění.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Middleware terminálu je middleware, který se spustí, pokud požadavek nezpracuje žádný koncový bod.

Informace o middlewaru antiforgery v minimálních rozhraních API najdete v tématu Prevence útoků XSRF/CSRF (Cross-Site Request Forgery) v ASP.NET Core.

Další informace o middlewaru najdete v tématu ASP.NET Core Middleware a seznam předdefinovaných middlewarů , které je možné přidat do aplikací.

Další informace o minimálních rozhraních API najdete v přehledu rozhraní API.