当我们调用 IFeatureManager.IsEnabled("featurename") 触发 IFeatureFilter.Evaulate 方法时,我们如何传递额外的参数
How can we pass extra parameters when we call IFeatureManager.IsEnabled("featurename") which triggers IFeatureFilter.Evaulate method
我正在学习 Azure 应用程序配置 - 功能管理器。
我想了解我们编写的自定义功能过滤器是否需要使用一些不属于 HttpContext 的参数。
当我们调用IFeatureManager.IsEnabled("featurename")时,我们如何传递额外的参数来触发自定义过滤器的Evaulate方法。
但是 azure 函数应用程序或 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);
}
}
FeatureManagement 存储库中有一个未解决的问题。 https://github.com/microsoft/FeatureManagement-Dotnet/issues/2。对于初始预览,这是不可能的。它应该在下一个版本中。
目前使用 AsyncLocal 来流动执行上下文将是一个可能的解决方案,但是它是一个 work-around 直到传递上下文的实际能力可用。
我正在学习 Azure 应用程序配置 - 功能管理器。
我想了解我们编写的自定义功能过滤器是否需要使用一些不属于 HttpContext 的参数。
当我们调用IFeatureManager.IsEnabled("featurename")时,我们如何传递额外的参数来触发自定义过滤器的Evaulate方法。
但是 azure 函数应用程序或 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);
}
}
FeatureManagement 存储库中有一个未解决的问题。 https://github.com/microsoft/FeatureManagement-Dotnet/issues/2。对于初始预览,这是不可能的。它应该在下一个版本中。
目前使用 AsyncLocal 来流动执行上下文将是一个可能的解决方案,但是它是一个 work-around 直到传递上下文的实际能力可用。