Как обрабатывать ошибку во время настраиваемой инъекции зависимости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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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