Поделиться через


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

WebApplication автоматически добавляет следующее ПО промежуточного слоя в Minimal API applications зависимости от определенных условий:

  • 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 автоматически добавляет следующее ПО промежуточного слоя в Minimal API applications зависимости от определенных условий:

  • 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 см. в статье "Предотвращение атак межсайтовых запросов forgery (XSRF/CSRF) в ASP.NET Core

Дополнительные сведения о по промежуточном слоях см. в разделе ASP.NET По промежуточного слоя Core и список встроенных по промежуточного слоя, которые можно добавить в приложения.

Дополнительные сведения о минимальных API см. в статье Minimal APIs overview.