Feature Flag 是否開啟,也可以透過自訂的類別來撰寫,可以透過IFeatureFilter來實現,以下範例以取得使用者 User-Agent 為例
- 實作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; }
}
- appsettings.json (允許Edge瀏覽器開啟FeatureA功能)
"FeatureManagement": {
"FeatureA": {
"EnabledFor": [
{
"Name": "Browser",
"Parameters": {
"Allowed": [
"Edg"
]
}
}
]
}
}
- startup 注入
services.AddSingleton<ITargetingContextAccessor, TestTargetingContextAccessor>();
services.AddFeatureManagement()
.AddFeatureFilter<BrowserFeatureFilter>();