21

ここで、単なる定義ではなく比較を取得できますか。

例:

SomeClassAttribute (or ISomeClassAttribute)

VS

SomeClassFilter (or ISomeClassFilter)

どちらも同じように使えそうな気がしますが、大まかに言うと「属性を適用する」「フィルターはそれが生み出す機能」です。したがって、「属性をメソッド (またはクラスなど) に追加してフィルターを適用することができます。

4

3 に答える 3

13

「そのため、「メソッド (またはクラスなど) に属性を追加して、フィルターを適用することができました。」

あなたはその文でそれを持っています。 フィルター属性は厳密に比較できる概念ではなく、2 つの異なる機能を果たします。

MVC でのフィルタリングについては、このMSDN の記事で十分に説明されていると思います。

属性(少なくともフィルターに適用されるもの) は、フィルターが適用されるもの、つまりアクション メソッドまたはコントローラーをマークします。例として、Authorize属性があります。この属性は、インターフェースを実装するAuthorizationFilterIAuthorizationFilterに対応します。属性をアクション メソッドに適用Authorizeすると、そのアクション メソッドを対象とするリクエストを承認するように MVC に指示されます。コントローラーに属性を適用すると、コントローラーのアクション メソッドを対象とするすべてのリクエストを承認するように MVC に指示されます。または、承認をすべてのリクエストに対してグローバルに適用することもできます。前に言ったように、少なくともフィルターに適用されるものは属性です。は .NET の概念と構文であり、MVC だけではありません。他にも非常に多くの属性があり、一般に、それらが適用されるプロパティ、メソッド、クラスに関する追加情報を提供します。

于 2013-08-29T12:48:59.890 に答える
5

ほとんどの場合、属性はメソッド/クラス/などに関するメタデータを記述するために使用されます。たとえば、クラスをシリアル化できることを示す Serializable 属性、クラスをテストとしてマークする TestClass 属性、廃止されたものとしてマークする Obsolete 属性があります。リフレクションは、それらを使用したいプロセスによってこの情報を抽出するために使用されます。属性に関するこの質問でよく説明されています。

AuthorizeAttributeなどの MVC のフィルター属性は、他の属性と同様の追加情報を伝達します。AuthorizeAttribute で装飾されたコントローラー メソッドまたはクラスは、MVC で使用するときに承認が必要であることを示します。ただし、他の属性とは異なり、フィルター属性自体には実際の機能を実行するためのロジックが含まれています。AuthorizeAttributeは (FilterAttribute を介して) Attributeから派生し、 IAuthorizationFilterも実装します。 . MVC は、AuthorizeAttribute で装飾されたコントローラー クラスを見つけると、AuthorizeAttribute.OnAuthorization() メソッドを呼び出して承認を実行します。また、グローバル フィルターを指定する場合は、属性クラス自体をフィルター リストに追加します。これは少し混乱する可能性がありますが、次のように機能します。

void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AuthorizeAttribute());
}
于 2015-11-23T03:35:02.550 に答える