Как мы можем передать дополнительные параметры, когда мы вызываем IFeatureManager.IsEnabled("featurename"), который вызывает метод IFeatureFilter.Evaulate
Я изучаю конфигурацию приложения Azure - менеджер функций.
Я пытаюсь понять, нужно ли в фильтре пользовательских функций, который мы пишем, использовать некоторые параметры, которые не являются частью HttpContext.
Как мы можем передать дополнительные параметры, когда мы вызываем IFeatureManager.IsEnabled("featurename"), который запускает метод Evaulate пользовательского фильтра.
Но как приложение Azure Function или Webjob будет использовать его.
[FilterAlias("AllowedUsers")]
public class AllowedUsersFeatureFilter : IFeatureFilter
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AllowedUsersFeatureFilter(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
// HOW CAN WE PASS SOME parameter when we call IFeatureManager.IsEnabled("featurename")
public bool Evaluate**(FeatureFilterEvaluationContext context)**
{
var featureFilterParams = context.Parameters.Get<AllowedUsersFilterSettings>();
if (featureFilterParams == null)
return false;
var userEmail = _httpContextAccessor.HttpContext.User?.FindFirst(ClaimTypes.Upn)?.Value;
var alias= userEmail?.Split('@').First();
return featureFilterParams.Aliases.Split(',').Contains(alias, StringComparer.OrdinalIgnoreCase);
}
}
1 ответ
Существует проблема, открытая для этого в репозитории FeatureManagement. https://github.com/microsoft/FeatureManagement-Dotnet/issues/2. При первоначальном предварительном просмотре это невозможно. Это должно быть в следующем выпуске.
В настоящее время использование AsyncLocal для передачи контекста выполнения было бы возможным решением, однако это обходной путь, пока не станет доступна фактическая возможность передачи в контексте.