Код: Выделить всё
// 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());
});
< /code>
Создание клиентских таблиц на схему работает довольно хорошо, но я хочу сделать исключение, когда не выработанный клиент пытается получить доступ к системе. Вот почему есть новый клиент. Apibehavior Objective
Я хочу поймать исключение для рендеринга http 403 forbided http 500. Http status.
Знаете ли вы, как это сделать или иметь идею?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -injection
Мобильная версия