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 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

WebApplication automaticky přidá následující middleware v Minimal API applications závislosti na určitých podmínkách:

  • UseDeveloperExceptionPageje přidána jako první, pokud je "Development".HostingEnvironment
  • 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 Minimal API applications závislosti na určitých podmínkách:

  • UseDeveloperExceptionPageje přidána jako první, pokud je "Development".HostingEnvironment
  • 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 naleznete v tématu Minimal APIs overview.