例子:
SomeClassAttribute (or ISomeClassAttribute)
VS
SomeClassFilter (or ISomeClassFilter)
我的感觉是它们可以以类似的方式使用,但一般来说,“属性被应用”,而“过滤器则是它们所产生的功能”。因此,我可以“向方法(或类或其他任何内容)添加属性以应用过滤器。”
SomeClassAttribute (or ISomeClassAttribute)
VS
SomeClassFilter (or ISomeClassFilter)
我的感觉是它们可以以类似的方式使用,但一般来说,“属性被应用”,而“过滤器则是它们所产生的功能”。因此,我可以“向方法(或类或其他任何内容)添加属性以应用过滤器。”
"因此我可以向方法(或类或其他)添加属性来应用过滤器。"
您在这个句子中已经理解了它。 过滤器和属性并不是完全可比的概念,它们有着不同的功能。
我认为MVC中的过滤器在这篇MSDN文章中有很好的介绍。
属性(至少适用于过滤器)标记了过滤器所应用的内容,例如操作方法或控制器。一个例子是Authorize
属性。该属性对应实现IAuthorizationFilter
接口的AuthorizationFilter。将Authorize
属性应用于操作方法告诉MVC授权请求以针对该操作方法,将其应用于控制器告诉MVC授权任何请求以针对控制器的操作方法,或者还可以全局应用于所有请求。我之前说过,至少适用于过滤器,因为属性是.NET框架的概念和语法,而不仅仅是MVC。还有许多其他东西的属性,通常用于提供有关所应用的属性、方法、类的附加信息。
MVC 中的过滤器属性,比如 AuthorizeAttribute,传递类似于其他属性的额外信息 -- 被 AuthorizeAttribute 修饰的控制器方法或类表示在 MVC 中需要进行授权。但与某些其他属性不同的是,过滤器属性本身包含执行实际功能的逻辑 -- AuthorizeAttribute 派生自 Attribute(通过 FilterAttribute),并且还 实现 IAuthorizationFilter。当 MVC 发现被 AuthorizeAttribute 修饰的控制器类时,它会调用 AuthorizeAttribute.OnAuthorization() 方法来执行授权。此外,在指定全局过滤器时,将属性类本身添加到过滤器列表中可能有点令人困惑,但这就是它的工作方式:
void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}