Как обрабатывать ошибку во время настраиваемой инъекции зависимостиC#

Место общения программистов C#
Anonymous
Как обрабатывать ошибку во время настраиваемой инъекции зависимости

Сообщение Anonymous »

Я применил мультитенантное место для базы данных EF Core, применяя схему настройки на арендатора в моем проекте ASP.net Core Web API.

Код: Выделить всё

// NOTICE: Scoped service for tenant resolution
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped(sp =>
{
var tenantIdString = sp.GetRequiredService().HttpContext?.Request.Headers["X-Tenant-Id"];
return !string.IsNullOrEmpty(tenantIdString) && Guid.TryParse(tenantIdString, out var tenantId) ? new Tenant { TenantId = tenantId } : null;
});
< /code>
После этого я вводил в срок службы в области срока службы, контекст базы данных с клиентской схемой, сохраненными в таблицах базы данных приложений, например: < /p>
// NOTICE: Scoped service for ClientDbContext resolution
builder.Services.AddScoped(sp =>
{
var configuration = sp.GetRequiredService();
var applicationDbContext = sp.GetRequiredService();
var tenant = sp.GetRequiredService();

if (EF.IsDesignTime)
{
return new ClientDbContext(new DbContextOptions(), configuration);
}

var client = applicationDbContext.Clients.FirstOrDefault(x => x.TenantId == tenant.TenantId);
return new ClientDbContext(configuration, client?.Schema ?? throw new ClientNotDeclaredException());
});
Создание клиентских таблиц для каждой схемы работает довольно хорошо, но я хочу генерировать исключение, когда необъявленный клиент пытается получить доступ к системе. Вот почему в конце есть throw new ClientNotDeclaredException().
Технический стек:
  • .NET 8.0
  • EF Core 9.0.9
Я попытался обработать исключение в контроллере и ApiBehavior с использованием InvalidModelStateResponseFactory безуспешно.
Цель
Я хочу перехватить исключение для отображения HTTP 403 Forbidden вместо HTTP 500 Server Error, но я не знаю, как можно с этим справиться и, кроме того, предоставить право Статус HTTP.
Знаете ли вы, как это сделать, или имеете идеи?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -injection

Вернуться в «C#»