Промежуточное ПО в минимальных API-приложениях

Примечание.

Это не последняя версия этой статьи. В текущей версии см. версию .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.