C# 如何在ASP.NET Core中调用类时访问筛选器属性
是否可以从使用它的类访问筛选器中的属性 我希望能够访问下面筛选器中的客户端属性C# 如何在ASP.NET Core中调用类时访问筛选器属性,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,是否可以从使用它的类访问筛选器中的属性 我希望能够访问下面筛选器中的客户端属性 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)] public class ClientAuthenticationAttribute : ActionFilterAttribute, IActionFilter { private ILogger _logger; private
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]
public class ClientAuthenticationAttribute : ActionFilterAttribute, IActionFilter
{
private ILogger _logger;
private GenericUnitOfWork _worker;
private bool _authRequired;
private Client _client;
public ClientAuthenticationAttribute(bool authRequired = true)
{
_authRequired = authRequired;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
...
base.OnActionExecuting(context);
}
public bool AuthRequired { get { return _authRequired; } }
public Client Client { get { return _client; } }
}
我同意卡米洛的观点,这可能不是一个好主意——很容易打破 也就是说,一种方法是过滤器在上下文中删除一个值: 然后可以在以后的任何地方(在同一个请求中)读取它,该位置可以访问HttpContext
这样做的危险在于,如果有人更改过滤器的工作方式,或者完全删除过滤器,那么以后的代码将被破坏——这对任何使用过滤器代码的人来说都不明显。我同意卡米洛的观点,这可能不是一个好主意——很容易被破坏 也就是说,一种方法是过滤器在上下文中删除一个值: 然后可以在以后的任何地方(在同一个请求中)读取它,该位置可以访问HttpContext
这样做的危险在于,如果任何人更改了过滤器的工作方式,或完全删除了过滤器,则以后的代码将中断—这对于任何使用过滤器代码的人来说都不明显。使用反射来访问自定义属性。这是一个非常快速的未测试版本,因此请添加适当的空检查、强制转换等
var props = this.GetProperties();
foreach (PropertyInfo prop in props) {
var attrs = prop.GetCustomAttributes(true);
foreach (object attr in attrs.Where(a => a is ClientAuthenticationAttribute)) {
var client = ((ClientAuthenticationAttribute)attr).Client;
// ... do something with client.
}
}
由于您可能有多个客户端属性,因此您还需要对这种情况进行一些处理。使用反射来访问自定义属性。这是一个非常快速的未测试版本,因此请添加适当的空检查、强制转换等
var props = this.GetProperties();
foreach (PropertyInfo prop in props) {
var attrs = prop.GetCustomAttributes(true);
foreach (object attr in attrs.Where(a => a is ClientAuthenticationAttribute)) {
var client = ((ClientAuthenticationAttribute)attr).Client;
// ... do something with client.
}
}
由于您可能有多个客户端属性,因此您还需要对这种情况进行一些处理。筛选器不应该知道它应用于何处,目标不应该知道筛选器存在筛选器不应该知道它应用于何处,目标不应该知道筛选器存在