Код: Выделить всё
// 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());
});
Технический стек:
- .NET 8.0
- EF Core 9.0.9
Цель
Я хочу перехватить исключение для отображения HTTP 403 Forbidden вместо HTTP 500 Server Error, но я не знаю, как можно с этим справиться и, кроме того, предоставить право Статус HTTP.
Знаете ли вы, как это сделать, или имеете идеи?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -injection
Мобильная версия