gpt4 book ai didi

c# - 如何在 asp.net 中将参数添加到操作过滤器?

转载 作者:可可西里 更新时间:2023-11-01 03:04:44 31 4
gpt4 key购买 nike

我有以下过滤器属性,我可以像这样将一个字符串数组传递给属性 [MyAttribute("string1", "string2")]

public class MyAttribute : TypeFilterAttribute
{
private readonly string[] _ids;

public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
_ids = ids;
}

private class MyAttributeImpl : IActionFilter
{
private readonly ILogger _logger;

public MyAttributeImpl(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<MyAttribute>();
}

public void OnActionExecuting(ActionExecutingContext context)
{
// HOW DO I ACCESS THE IDs VARIABLE HERE ???
}

public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}

如何将字符串数组 _ids 传递给 Action 过滤器的实现?我是否遗漏了一些非常明显的东西!?

最佳答案

TypeFilterAttribute 有一个Argument 属性(object[] 类型),您可以在其中将参数传递给实现的构造函数。因此适用于您的示例,您可以使用此代码:

public class MyAttribute : TypeFilterAttribute
{
public MyAttribute(params string[] ids) : base(typeof(MyAttributeImpl))
{
Arguments = new object[] { ids };
}

private class MyAttributeImpl : IActionFilter
{
private readonly string[] _ids;
private readonly ILogger _logger;

public MyAttributeImpl(ILoggerFactory loggerFactory, string[] ids)
{
_ids = ids;
_logger = loggerFactory.CreateLogger<MyAttribute>();
}

public void OnActionExecuting(ActionExecutingContext context)
{
// NOW YOU CAN ACCESS _ids
foreach (var id in _ids)
{
}
}

public void OnActionExecuted(ActionExecutedContext context)
{
}
}
}

关于c# - 如何在 asp.net 中将参数添加到操作过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181390/

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