gpt4 book ai didi

c# - .net Core 中的自定义属性设置

转载 作者:行者123 更新时间:2023-11-30 22:53:47 25 4
gpt4 key购买 nike

我正在编写一个非常简单的自定义属性,用于我的 ASP.net Core 方法。该属性用于处理指示端点方法“打开或关闭”的功能标志,如下所示:

1) 如果启用了某个功能,则允许代码传递到该方法并正常执行它。2)如果关闭了feature,直接从属性返回,不执行里面的方法

我的思路是这样的:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class FeatureFlagAttribute : ActionFilterAttribute
{
private Dictionary<string, bool> myFeaturesList;
private readonly string selectedFeature;

public FeatureFlagAttribute(string featureName)
{
selectedFeature = featureName;
}

public override void OnActionExecuting(ActionExecutingContext context)
{
var found = myFeaturesList.TryGetValue(selectedFeature, out var result);

if (!found || !result)
{
// dont continue
context.HttpContext.Response.StatusCode = 403;
}
}
}

我需要填充 myFeaturesList 才能工作,但我不想每次使用它时都将它传递给构造函数。最好的配置方法是什么?我正在考虑在属性中设置一个静态属性,但认为这是一种有点蹩脚的方法,必须有更好的方法。提前致谢!

最佳答案

或者,您可以将 featureNames 的创建提取到可注入(inject)服务(注册到 DI)中,并将您的属性用作类型过滤器或与 IFilterFactory 一起使用。

使用类型过滤器,您可以将属性创建为:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class FeatureFlagAttribute : ActionFilterAttribute
{
private readonly string _featureName;
private readonly IFeatureService _featureService;

public FeatureFlagAttribute(string featureName, IFeatureService featureService)
{
_featureName = featureName;
_featureService = featureService;
}

public override void OnActionExecuting(ActionExecutingContext context)
{
var features = _featureService.GetMyFeatures();
var found = features.TryGetValue(_featureName, out var result);

if (!found || !result)
{
// don't continue
context.HttpContext.Response.StatusCode = 403;
}
}
}

构造函数参数中,featureName保持不变,需要定义到属性中,而featureService会从DI中获取,所以需要注册在您的初创公司的 ConfigureServices() 中对此进行实现。

属性的使用随着类型过滤器的改变而有所改变,例如:

[TypeFilter(typeof(FeatureFlagAttribute), Arguments = new object[] { "feature-A" })]
public IActionResult Index()
{
return View();
}

您可以在文档中阅读更多将依赖项注入(inject)过滤器的选项: https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.2#dependency-injection

关于c# - .net Core 中的自定义属性设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56848797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com