Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.
В этой статье описывается, как использовать ПО промежуточного слоя в приложениях API минимального размера. Воспользуйтесь преимуществами автоматизированного промежуточного ПО в минимальных API приложениях или определите настроенное пользователем и терминальную обработку.
Доступное ПО промежуточного слоя
WebApplication автоматически добавляет следующее ПО промежуточного слоя в минимальные приложения API в зависимости от определенных условий:
-
UseDeveloperExceptionPageсначала добавляется, когдаHostingEnvironmentявляется"Development". -
UseRoutingдобавляется во второй очереди, если пользовательский код еще не вызвалUseRoutingи если существуют настроенные конечные точки, напримерapp.MapGet. -
UseEndpointsдобавляется в конце конвейера промежуточного программного обеспечения, если настроены какие-либо конечные точки. -
UseAuthenticationдобавляется сразу послеUseRouting, если пользовательский код еще не вызвалUseAuthentication, и еслиIAuthenticationSchemeProviderможет быть обнаружен в поставщике услуг.IAuthenticationSchemeProviderдобавляется по умолчанию при использованииAddAuthentication, а службы обнаруживаются с помощьюIServiceProviderIsService. -
UseAuthorizationдобавляется далее, если пользовательский код еще не вызвалUseAuthorization, и еслиIAuthorizationHandlerProviderможет быть обнаружен в поставщике услуг.IAuthorizationHandlerProviderдобавляется по умолчанию при использованииAddAuthorization, а службы обнаруживаются с помощьюIServiceProviderIsService. - Промежуточное программное обеспечение, настраиваемое пользователем, и конечные точки добавляются между
UseRoutingиUseEndpoints.
Следующий код фактически является тем, что автоматически добавляется в приложение промежуточным слоем.
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 => {});
В некоторых случаях конфигурация ПО промежуточного слоя по умолчанию не является правильной для приложения и требует изменения. Например, UseCors следует вызывать до UseAuthentication и UseAuthorization. Приложение должно вызывать UseAuthentication и UseAuthorization, если вызывается UseCors.
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Если промежуточное ПО должно быть запущено перед сопоставлением маршрутов, следует вызвать UseRouting, и промежуточное ПО нужно разместить перед вызовом UseRouting.
UseEndpoints Не требуется в этом случае, так как он автоматически добавляется, как описано ранее:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
При добавлении терминального промежуточного ПО:
- Промежуточное ПО должно быть добавлено после
UseEndpoints. - Приложение должно вызывать
UseRoutingиUseEndpointsтаким образом, чтобы промежуточное ПО терминала можно было разместить в правильном месте.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
ПО промежуточного слоя терминала — это ПО промежуточного слоя, которое выполняется, если конечная точка не обрабатывает запрос.
WebApplication автоматически добавляет следующее ПО промежуточного слоя в минимальные приложения API в зависимости от определенных условий:
UseDeveloperExceptionPage добавляется сначала, когда HostingEnvironment
"Development".UseRouting добавляется на втором месте, если пользовательский код еще не вызвал
UseRouting, и конечные точки настроены, напримерapp.MapGet.UseEndpoints добавляется в конце конвейера ПО промежуточного слоя, если конечные точки настроены.
UseAuthentication добавляется сразу после
UseRouting, если пользовательский код еще не вызвалUseAuthenticationи если IAuthenticationSchemeProvider можно обнаружить в службе поставщика.IAuthenticationSchemeProviderпо умолчанию добавляется при использовании AddAuthentication, а службы обнаруживаются с помощью IServiceProviderIsService.UseAuthorization добавляется далее, если пользовательский код еще не вызвал
UseAuthorizationи если IAuthorizationHandlerProvider можно обнаружить в поставщике услуг.IAuthorizationHandlerProviderдобавляется по умолчанию при использовании AddAuthorization, а службы обнаруживаются с помощьюIServiceProviderIsService.Пользовательски сконфигурированное промежуточное ПО и конечные точки добавляются между
UseRoutingиUseEndpoints.
Следующий код фактически показывает, что создается программное обеспечение, добавляемое в приложение средствами автоматизации промежуточного программного обеспечения:
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 => {});
В некоторых случаях конфигурация ПО промежуточного слоя по умолчанию не является правильной для приложения и требует изменения. Например, UseCors следует вызывать до UseAuthentication и UseAuthorization. Приложение должно вызвать UseAuthentication и UseAuthorization, если вызвано UseCors.
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Если промежуточное ПО должно выполняться перед сопоставлением маршрутов, необходимо вызвать UseRouting, и промежуточное ПО следует поместить перед вызовом UseRouting.
UseEndpoints Не требуется в этом случае, так как он автоматически добавляется, как описано ранее:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// Other middleware and endpoints
При добавлении промежуточного ПО терминала:
Промежуточное ПО необходимо добавить после
UseEndpoints.Приложение должно вызывать
UseRoutingиUseEndpoints, чтобы промежуточное ПО терминала можно было разместить в правильном месте.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
ПО промежуточного слоя терминала — это ПО промежуточного слоя, которое выполняется, если конечная точка не обрабатывает запрос.
Сведения об антифальсификационной промежуточной программе в минимальных API см. в статье Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core.
Связанный контент
ASP.NET Core