这曾经用于早期版本的 .Net。.net 核心术语中的等价物是什么。现在我收到以下错误:
“ActionDescriptor”不包含“ GetCustomAttributes ”的定义,并且找不到接受“ActionDescriptor”类型的第一个参数的扩展方法“ GetCustomAttributes ”
public virtual void SetupMetadata(ActionExecutingContext filterContext)
{
var myAttr = filterContext.ActionDescriptor.GetCustomAttributes(typeof(MyAttribute), false);
if (myAttr.Length == 1)
//do something
}
Run Code Online (Sandbox Code Playgroud)
属性定义:
public class MyAttribute : Attribute
{
private readonly string _parameter;
public PageTitleAttribute(string parameter)
{
_parameter = parameter;
}
public string Parameter { get { return _parameter; } }
}
Run Code Online (Sandbox Code Playgroud)
代码用法:
[MyAttribute("Attribute value is set here")]
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
Run Code Online (Sandbox Code Playgroud) 我有一个过滤器,想要应用于除一个以外的所有控制器.所以我想写一些看起来像这样的东西:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MySweetAttribute()).Exclude(OneController);
}
Run Code Online (Sandbox Code Playgroud)
试图通读Brad关于这个主题的帖子对我来说是胡言乱语
http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html
我假设它是可能的,因为下面的库似乎这样做,但我想避免添加依赖项,如果可能的话.
http://www.codeproject.com/KB/aspnet/FluentFltrsASPNETMVC3.aspx
希望有人已经这样做了,很容易做到......
谢谢你的帮助.
Phil Haack刚刚发布了如何处理这种情况.
http://haacked.com/archive/2011/04/25/conditional-filters.aspx
我想使用IOverrideFilter接口覆盖我的自定义全局过滤器,但它根本无法正常工作!代码看起来如下:
public sealed class MyGlobalFilterExceptionAttribute : FilterAttribute, IOverrideFilter
{
public Type FiltersToOverride
{
get { return typeof(ITest); }
}
}
Run Code Online (Sandbox Code Playgroud)
我的全局过滤器已实现ITest接口.我知道我可以在我原来的全局过滤器中实现该任务,但我想这样做IOverrideFilter.
任何的想法??