Feature Flag 是否開啟,也可以透過自訂的類別來撰寫,可以透過IFeatureFilter來實現,以下範例以取得使用者 User-Agent 為例

  1. 實作IFeatureFilter,新增一個 BrowserFeatureFilter.cs 檔案
[FilterAlias("Browser")]
public class BrowserFeatureFilter : IFeatureFilter
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public BrowserFeatureFilter(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public Task<bool> EvaluateAsync(FeatureFilterEvaluationContext context)
    {
        // 取得Request的瀏覽器類型
        var agent = _httpContextAccessor.HttpContext.Request.Headers["User-Agent"].ToString();
        // 取得 appSettings.json的設定
        var settings = context.Parameters.Get<BrowserFilterSettings>();
        // TODO: 這邊就可以撰寫邏輯驗證是否針對該瀏覽器開此功能
        return Task.FromResult<bool>(false);
    }
}

public class BrowserFilterSettings
{
    public string[] Allowed { get; set; }
}
  1. appsettings.json (允許Edge瀏覽器開啟FeatureA功能)
"FeatureManagement": {
    "FeatureA": {
        "EnabledFor": [
            {
                "Name": "Browser",
                "Parameters": {
                    "Allowed": [
                    "Edg"
                    ]
                }
            }
        ]
    }
}
  1. startup 注入
services.AddSingleton<ITargetingContextAccessor, TestTargetingContextAccessor>();

services.AddFeatureManagement()
        .AddFeatureFilter<BrowserFeatureFilter>();