C# MVC中属性和过滤器的区别是什么

C# MVC中属性和过滤器的区别是什么,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,action-filter,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Action Filter,现在我可以做一个比较,而不仅仅是一个定义 例如: SomeClassAttribute (or ISomeClassAttribute) VS 我有一种感觉,它们可以以相同的方式使用,但一般来说,“应用属性”和“过滤器是它们产生的功能”。因此,我可以“向方法(或类或任何东西)添加属性以应用过滤器” “所以我可以”向一个方法(或类或任何东西)添加一个属性 应用过滤器。” 就在那句话里过滤器和属性不是完全可比较的概念,它们具有两种不同的功能 我相信这篇文章很好地介绍了MVC中的过滤功能 属性(至少

现在我可以做一个比较,而不仅仅是一个定义

例如:

SomeClassAttribute (or ISomeClassAttribute)
VS

我有一种感觉,它们可以以相同的方式使用,但一般来说,“应用属性”和“过滤器是它们产生的功能”。因此,我可以“向方法(或类或任何东西)添加属性以应用过滤器”

“所以我可以”向一个方法(或类或任何东西)添加一个属性 应用过滤器。”

就在那句话里过滤器属性不是完全可比较的概念,它们具有两种不同的功能

我相信这篇文章很好地介绍了MVC中的过滤功能


属性(至少适用于过滤器的属性)标记过滤器应用于的对象,即操作方法或控制器。例如,
Authorize
属性。此属性对应于实现
IAAuthorizationFilter
接口的AuthorizationFilter。将
Authorize
属性应用于某个操作方法会告诉MVC授权针对该操作方法的请求,将其应用于控制器会告诉MVC授权针对控制器的某个操作方法的任何请求,或者授权也可以全局应用于所有请求。现在我已经说过了,至少那些适用于过滤器的属性,因为属性是.NET的概念和语法,而不仅仅是MVC。还有许多其他东西的属性,通常用于提供有关它们所应用的属性、方法、类的附加信息。

属性是.NET的一项功能,MVC过滤器是使用该功能实现的


例如,派生自BCL。过滤器通过挂钩将行为应用到MVC管道中(粗略地说)。

在大多数情况下,属性用于描述有关方法/类/等的元数据。例如,有Serializable属性表示可以序列化类,TestClass属性表示将类标记为测试,以及“过时”属性,以将某些内容标记为过时。反射用于通过希望使用这些信息的进程提取这些信息。这篇关于属性的文章很好地介绍了这一点

MVC中的过滤器属性,例如,传递与其他属性类似的额外信息——由AuthorizeAttribute修饰的控制器方法或类表示MVC使用时需要授权。但与其他一些属性不同,过滤器属性本身包含执行实际功能的逻辑——AuthorizeAttribute派生自属性(通过FilterAttribute),并实现IAAuthorizationFilter。当MVC发现一个由AuthorizeAttribute修饰的控制器类时,它将在中调用AuthorizeAttribute.OnAuthorization()方法来执行授权。另外,在指定全局过滤器时,将属性类本身添加到过滤器列表中,这可能会有点混乱,但它就是这样工作的:

void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}

我可以说MVC过滤器是一种特殊属性吗?
void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}