App opstarten in ASP.NET Core
Notitie
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Belangrijk
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikelvoor de huidige release.
Door Rick Anderson
ASP.NET Core-apps die zijn gemaakt met de websjablonen, bevatten de opstartcode van de toepassing in het Program.cs
-bestand.
Voor richtlijnen met betrekking tot Blazor-opstart, die de richtlijnen in dit artikel aanvullen of vervangen, zie ASP.NET Core Blazor-opstart-.
De volgende opstartcode voor apps ondersteunt verschillende app-typen:
using WebAll.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.UseAntiforgery();
app.Run();
Apps die gebruikmaken van EventSource kunnen de opstarttijd meten om de opstartprestaties te begrijpen en te optimaliseren. De gebeurtenis ServerReady
in Microsoft.AspNetCore.Hosting vertegenwoordigt het punt waarop de server gereed is om te reageren op aanvragen.
Startup uitbreiden met opstartfilters
Gebruik IStartupFilter:
- Middleware configureren aan het begin of aan het eind van de middlewareketen van een app zonder expliciete aanroep van
Use{Middleware}
. GebruikIStartupFilter
om standaardinstellingen toe te voegen aan het begin van de pijplijn zonder expliciet de standaard-middleware te registreren.IStartupFilter
kan een ander onderdeel namens de auteur van de appUse{Middleware}
aanroepen. - Een pijplijn van
Configure
methoden maken. IStartupFilter.Configure kan een middleware instellen die moet worden uitgevoerd voor of na middleware die door bibliotheken is toegevoegd.
Een IStartupFilter
-implementatie implementeert Configure, die een Action<IApplicationBuilder>
ontvangt en retourneert. Een IApplicationBuilder definieert een klasse voor het configureren van de aanvraagpijplijn van een app. Zie Een middleware-pijplijn maken met IApplicationBuildervoor meer informatie.
Elke IStartupFilter
implementatie kan een of meer middlewares toevoegen in de aanvraagpijplijn. De filters worden aangeroepen in de volgorde waarin ze zijn toegevoegd aan de servicecontainer. Filters kunnen middleware toevoegen voor of na het doorgeven van de controle aan het volgende filter, waardoor ze aan het begin of het einde van de apppijplijn worden toegevoegd.
In het volgende voorbeeld ziet u hoe u een middleware registreert bij IStartupFilter
. De RequestSetOptionsMiddleware
middleware stelt een waarde voor opties in op basis van een querytekenreeksparameter:
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware(RequestDelegate next)
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
De RequestSetOptionsMiddleware
is geconfigureerd in de klasse RequestSetOptionsStartupFilter
:
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
De IStartupFilter
-implementatie is geregistreerd in Program.cs
:
using WebStartup.Middleware;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Wanneer een queryreeksparameter voor option
wordt opgegeven, verwerkt de middleware de waardetoewijzing voordat de ASP.NET Core-middleware het antwoord weergeeft:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
De uitvoeringsvolgorde van middleware wordt ingesteld op basis van de volgorde van IStartupFilter
registraties:
Meerdere
IStartupFilter
-implementaties kunnen met dezelfde objecten communiceren. Als bestellen belangrijk is, bestelt u deIStartupFilter
serviceregistraties zodat deze overeenkomen met de volgorde die hun middlewares moeten uitvoeren.Bibliotheken kunnen middleware toevoegen met een of meer
IStartupFilter
implementaties die vóór of na andere app-middleware worden uitgevoerd die zijn geregistreerd bijIStartupFilter
. EenIStartupFilter
middleware aanroepen voordat een middleware wordt toegevoegd door deIStartupFilter
van een bibliotheek:- Plaats de serviceregistratie voordat de bibliotheek wordt toegevoegd aan de servicecontainer.
- Als u deze later wilt aanroepen, plaatst u de serviceregistratie nadat de bibliotheek is toegevoegd.
U kunt de ASP.NET Core-app niet uitbreiden wanneer u Configure
overschrijft. Zie dit GitHub-probleemvoor meer informatie.
Configuratie toevoegen bij het opstarten vanuit een externe assembly
Met een IHostingStartup-implementatie kunt u verbeteringen aan een app toevoegen bij het opstarten vanuit een externe assembly buiten het Program.cs
-bestand van de app. Zie Hosting-opstartassembly's gebruiken in ASP.NET Corevoor meer informatie.
Opstarten, ConfigureServices en Configureren
Zie voor meer informatie over het gebruik van de ConfigureServices en Configure methoden met het minimale hostingmodel:
ASP.NET Core-apps die zijn gemaakt met de websjablonen, bevatten de opstartcode van de toepassing in het Program.cs
-bestand.
De volgende opstartcode voor apps ondersteunt:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.Run();
Zie ASP.NET Core fundamentals overviewvoor meer informatie over het opstarten van toepassingen.
Opstarten uitbreiden met opstartfilters
Gebruik IStartupFilter:
- Middleware configureren aan het begin of einde van de middleware-pijplijn van een app zonder expliciete aanroep van
Use{Middleware}
. GebruikIStartupFilter
om standaardinstellingen toe te voegen aan het begin van de pijplijn zonder expliciet de standaard-middleware te registreren.IStartupFilter
kan een ander onderdeel namens de auteur van de appUse{Middleware}
aanroepen. - Een pijplijn van
Configure
methoden maken. IStartupFilter.Configure kan een middleware instellen die moet worden uitgevoerd voor of na middleware die door bibliotheken is toegevoegd.
IStartupFilter
implementeert Configure, die een Action<IApplicationBuilder>
ontvangt en retourneert. Een IApplicationBuilder definieert een klasse voor het configureren van de aanvraagpijplijn van een app. Zie Een middleware-pijplijn maken met IApplicationBuildervoor meer informatie.
Elke IStartupFilter
kan een of meer middlewares toevoegen in de aanvraagpijplijn. De filters worden aangeroepen in de volgorde waarin ze zijn toegevoegd aan de servicecontainer. Filters kunnen middleware toevoegen voor of nadat de controle is doorgegeven aan het volgende filter, waardoor ze aan het begin of einde van de app-pijplijn worden toegevoegd.
In het volgende voorbeeld ziet u hoe u een middleware registreert bij IStartupFilter
. De RequestSetOptionsMiddleware
middleware stelt een waarde voor opties in op basis van een querytekenreeksparameter:
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware(RequestDelegate next)
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
De RequestSetOptionsMiddleware
is in de klasse RequestSetOptionsStartupFilter
geconfigureerd.
namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
// </snippet1>
De IStartupFilter
staat geregistreerd in Program.cs
.
using WebStartup.Middleware;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Wanneer een queryreeksparameter voor option
wordt opgegeven, verwerkt de middleware de waardetoewijzing voordat de ASP.NET Core-middleware het antwoord weergeeft:
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];
De uitvoeringsvolgorde van middleware wordt ingesteld op basis van de volgorde van IStartupFilter
registraties:
Meerdere
IStartupFilter
-implementaties kunnen met dezelfde objecten communiceren. Als de volgorde belangrijk is, sorteert u deIStartupFilter
serviceregistraties zodat deze overeenkomen met de volgorde waarin de middlewares moeten draaien.Bibliotheken kunnen middleware toevoegen met een of meer
IStartupFilter
implementaties die vóór of na andere app-middleware worden uitgevoerd die zijn geregistreerd bijIStartupFilter
. EenIStartupFilter
middleware aanroepen voordat een middleware wordt toegevoegd door deIStartupFilter
van een bibliotheek:- Plaats de serviceregistratie voordat de bibliotheek aan de servicecontainer wordt toegevoegd.
- Als u deze later wilt aanroepen, plaatst u de serviceregistratie nadat de bibliotheek is toegevoegd.
Opmerking: u kunt de ASP.NET Core-app niet uitbreiden wanneer u Configure
overschrijft. Zie dit GitHub-probleemvoor meer informatie.
Configuratie toevoegen bij het opstarten vanuit een externe assembly
Met een IHostingStartup-implementatie kunt u verbeteringen aan een app toevoegen bij het opstarten vanuit een externe assembly buiten het Program.cs
-bestand van de app. Zie Hosting-opstartassembly's gebruiken in ASP.NET Corevoor meer informatie.
De Startup
-klasse configureert services en de aanvraagpijplijn van de app.
De opstartklasse
ASP.NET Core-apps maken gebruik van een Startup
-klasse, die Startup
op conventie wordt genoemd. De klasse Startup
:
- U kunt desgewenst een ConfigureServices methode gebruiken om de -services van de app te configureren. Een service is een herbruikbaar onderdeel dat app-functionaliteit biedt. Services worden geregistreerd in
ConfigureServices
en binnen de app gebruikt via afhankelijkheidsinjectie (DI) of ApplicationServices. - Bevat een Configure methode voor het maken van de aanvraagverwerkingspijplijn van de app.
ConfigureServices
en Configure
worden aangeroepen door de ASP.NET Core-runtime wanneer de app wordt gestart:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Het voorgaande voorbeeld is bedoeld voor Razor Pagina's; de MVC-versie is vergelijkbaar.
De Startup
-klasse wordt opgegeven wanneer de host van de app is gebouwd. De Startup
-klasse wordt doorgaans opgegeven door de methode WebHostBuilderExtensions.UseStartup
/<TStartup>
aan te roepen op de hostbouwer:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
De host biedt services die beschikbaar zijn voor de Startup
klasseconstructor. De app voegt extra services toe via ConfigureServices
. Zowel de host- als app-services zijn beschikbaar in Configure
en in de hele app.
Alleen de volgende servicetypen kunnen worden geïnjecteerd in de Startup
constructor bij gebruik van de Generic Host (IHostBuilder):
public class Startup
{
private readonly IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
}
else
{
}
}
}
De meeste services zijn pas beschikbaar als de methode Configure
wordt aangeroepen.
Meerdere opstartopties
Wanneer de app afzonderlijke Startup
klassen definieert voor verschillende omgevingen (bijvoorbeeld StartupDevelopment
), wordt de juiste Startup
klasse geselecteerd tijdens runtime. De klasse waarvan het achtervoegsel de naam overeenkomt met de huidige omgeving, krijgt prioriteit. Als de app wordt uitgevoerd in de ontwikkelomgeving en zowel een Startup
-klasse als een StartupDevelopment
-klasse bevat, wordt de StartupDevelopment
klasse gebruikt. Zie Meerdere omgevingen gebruikenvoor meer informatie.
Zie De host voor meer informatie over de host. Zie voor informatie over het afhandelen van fouten tijdens het opstarten afhandeling van opstartuitzonderingen.
De methode ConfigureServices
De methode ConfigureServices is:
- Facultatief.
- Aangeroepen door de host vóór de
Configure
methode om de services van de app te configureren. - Waar configuratieopties volgens conventie worden ingesteld.
De host kan bepaalde services configureren voordat Startup
methoden worden aangeroepen. Voor meer informatie, zie De host.
Voor functies waarvoor een aanzienlijke installatie is vereist, zijn er Add{Service}
uitbreidingsmethoden op IServiceCollection.
bijvoorbeeldDbContext toevoegen, DefaultIdentity toevoegen, EntityFrameworkStores toevoegen en RazorPages toevoegen:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(
options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
}
Als u services toevoegt aan de servicecontainer, worden deze beschikbaar in de app en in de Configure
methode. De services worden opgelost via afhankelijkheidsinjectie of van ApplicationServices.
De configuratiemethode
De methode Configure wordt gebruikt om op te geven hoe de app reageert op HTTP-aanvragen. De aanvraagpijplijn wordt geconfigureerd door middleware- onderdelen toe te voegen aan een IApplicationBuilder exemplaar.
IApplicationBuilder
is beschikbaar voor de methode Configure
, maar deze is niet geregistreerd in de servicecontainer. Hosting maakt een IApplicationBuilder
en geeft deze rechtstreeks door aan Configure
.
De ASP.NET Core-sjablonen de pijplijn configureren met ondersteuning voor:
- uitzonderingspagina voor ontwikkelaars
- uitzonderingsafhandelaar
- HTTP Strict Transport Security (HSTS)
- HTTPS-omleiding
- statische bestanden
- ASP.NET Core MVC en Razor Pagina's
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Het voorgaande voorbeeld is bedoeld voor Razor Pagina's; de MVC-versie is vergelijkbaar.
Elke Use
extensiemethode voegt een of meer middlewareonderdelen toe aan de aanvraagpijplijn.
UseStaticFiles configureert bijvoorbeeld middleware om statische bestandenaan te bieden.
Elk middlewareonderdeel in de aanvraagpijplijn is verantwoordelijk voor het aanroepen van het volgende onderdeel in de pijplijn of het kortsluiten van de keten, indien van toepassing.
Aanvullende services, zoals IWebHostEnvironment
, ILoggerFactory
of iets dat is gedefinieerd in ConfigureServices
, kunnen worden opgegeven in de Configure
methodehandtekening. Deze services worden geïnjecteerd als ze beschikbaar zijn.
Zie ASP.NET Core Middlewarevoor meer informatie over het gebruik van IApplicationBuilder
en de volgorde van middlewareverwerking.
Services configureren zonder opstarten
Als u services en de aanvraagverwerkingspijplijn wilt configureren zonder een Startup
-klasse te gebruiken, roept u ConfigureServices
aan en Configure
gemaksmethoden op de hostbouwer. Meerdere oproepen naar ConfigureServices
worden aan elkaar gekoppeld. Als er meerdere Configure
methode-aanroepen bestaan, wordt de laatste Configure
aanroep gebruikt.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureServices(services =>
{
services.AddControllersWithViews();
})
.Configure(app =>
{
var loggerFactory = app.ApplicationServices
.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<Program>();
var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
var config = app.ApplicationServices.GetRequiredService<IConfiguration>();
logger.LogInformation("Logged in Configure");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
var configValue = config["MyConfigKey"];
});
});
});
}
De Startup-functie uitbreiden met opstartfilters
Gebruik IStartupFilter:
- Als u middleware aan het begin of einde van de van een app wilt configureren, configureert u middleware-pijplijn zonder expliciete aanroep van
Use{Middleware}
.IStartupFilter
wordt gebruikt door ASP.NET Core om standaardwaarden toe te voegen aan het begin van de pijplijn zonder dat de auteur van de app expliciet de standaard-middleware moet registreren.IStartupFilter
kan een ander onderdeel namens de auteur van de appUse{Middleware}
aanroepen. - Een pijplijn van
Configure
methoden maken. IStartupFilter.Configure kan een middleware instellen die moet worden uitgevoerd voor of na middleware die door bibliotheken is toegevoegd.
IStartupFilter
implementeert Configure, die een Action<IApplicationBuilder>
ontvangt en retourneert. Een IApplicationBuilder definieert een klasse voor het configureren van de aanvraagpijplijn van een app. Zie Een middleware-pijplijn maken met IApplicationBuildervoor meer informatie.
Elke IStartupFilter
kan een of meer middlewares toevoegen in de aanvraagpijplijn. De filters worden aangeroepen in de volgorde waarin ze zijn toegevoegd aan de servicecontainer. Filters kunnen middleware toevoegen voor of na het overdragen van de controle aan het volgende filter, waardoor ze worden toegevoegd aan het begin of einde van de applicatiepijplijn.
In het volgende voorbeeld ziet u hoe u een middleware registreert bij IStartupFilter
. De RequestSetOptionsMiddleware
middleware stelt een waarde voor opties in op basis van een querytekenreeksparameter:
public class RequestSetOptionsMiddleware
{
private readonly RequestDelegate _next;
public RequestSetOptionsMiddleware( RequestDelegate next )
{
_next = next;
}
// Test with https://localhost:5001/Privacy/?option=Hello
public async Task Invoke(HttpContext httpContext)
{
var option = httpContext.Request.Query["option"];
if (!string.IsNullOrWhiteSpace(option))
{
httpContext.Items["option"] = WebUtility.HtmlEncode(option);
}
await _next(httpContext);
}
}
De RequestSetOptionsMiddleware
is geconfigureerd in de klasse RequestSetOptionsStartupFilter
:
public class RequestSetOptionsStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return builder =>
{
builder.UseMiddleware<RequestSetOptionsMiddleware>();
next(builder);
};
}
}
De IStartupFilter
wordt geregistreerd in de servicecontainer in ConfigureServices.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureServices(services =>
{
services.AddTransient<IStartupFilter,
RequestSetOptionsStartupFilter>();
});
}
Wanneer een queryreeksparameter voor option
wordt opgegeven, verwerkt de middleware de waardetoewijzing voordat de ASP.NET Core-middleware het antwoord weergeeft.
De uitvoeringsvolgorde van middleware wordt ingesteld op basis van de volgorde van IStartupFilter
registraties:
Meerdere
IStartupFilter
-implementaties kunnen met dezelfde objecten communiceren. Als de volgorde belangrijk is, rangschikt u deIStartupFilter
serviceregistraties zodat ze overeenkomen met de volgorde waarin hun middlewares moeten draaien.Bibliotheken kunnen middleware toevoegen met een of meer
IStartupFilter
implementaties die vóór of na andere app-middleware worden uitgevoerd die zijn geregistreerd bijIStartupFilter
. Roep eenIStartupFilter
-middleware aan voordat een middleware door een bibliotheek viaIStartupFilter
wordt toegevoegd.- Plaats de serviceregistratie vóórdat de bibliotheek aan de servicecontainer wordt toegevoegd.
- Om het later aan te roepen, plaatst u de serviceregistratie nadat de bibliotheek is toegevoegd.
Configuratie toevoegen bij het opstarten vanuit een externe assembly
Met een IHostingStartup-implementatie kunt u verbeteringen aan een app toevoegen bij het opstarten vanuit een externe assembly buiten de Startup
klasse van de app. Zie Hosting-opstartassembly's gebruiken in ASP.NET Corevoor meer informatie.