0

我正在学习 Azure 应用程序配置 - 功能管理器。

我试图了解我们编写的自定义功能过滤器是否需要使用一些不属于 HttpContext 的参数。

当我们调用触发自定义过滤器的 Evaulate 方法的 IFeatureManager.IsEnabled("featurename") 时,我们如何传递额外的参数。

但是一个 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);            
    }
}
4

1 回答 1

1

FeatureManagement 存储库中存在一个未解决的问题。https://github.com/microsoft/FeatureManagement-Dotnet/issues/2。对于初始预览,这是不可能的。它应该在下一个版本中。

目前使用 AsyncLocal 来流动执行上下文可能是一种解决方案,但是在传递上下文的实际能力可用之前,它是一种变通方法。

于 2019-07-19T15:13:00.550 回答