首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 過濾器提供機制:FilterProvider 與 FilterAttribute 深度剖析

     編輯:關於ASP.NET

ASP.NET MVC 透過四大過濾器(Authorization、Action、Result、Exception)實現 AOP。所有過濾器統一由 Filter 類別封裝,透過 IFilterProvider 機制提供。本文詳細說明 Filter 排序規則、三大內建 Provider 及 FilterAttribute 宣告式應用方式。

一、Filter 類別與執行順序

public class Filter
{
    public object Instance { get; protected set; }
    public int Order { get; protected set; }
    public FilterScope Scope { get; protected set; }
}

public enum FilterScope
{
    First = 0, Global = 10, Controller = 20, Action = 30, Last = 100
}

排序規則:Order 越小優先級越高(預設 -1);Order 相同時,Scope 枚舉值越小越優先。故同 Order 下:First > Global > Controller > Action > Last。

二、IFilterProvider 與三大內建 Provider

public interface IFilterProvider
{
    IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor);
}
  1. FilterAttributeFilterProvider:掃描 Controller/Action 上的 FilterAttribute 特性建立 Filter。
  2. ControllerInstanceFilterProvider:若 Controller 實作過濾器介面(如 IActionFilter),直接以 Controller 實例為 Filter。
  3. GlobalFilterCollection:全域註冊的過濾器(GlobalFilters.Filters.Add()),Scope 為 Global。

FilterProviders.Providers 管理所有 Provider,FilterProviderCollection.GetFilters() 聚合所有 Filter。

三、FilterAttribute 宣告式應用

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public abstract class FilterAttribute : Attribute, IMvcFilter
{
    public int Order { get; set; }
    public bool AllowMultiple { get; } // 預設 false
}

特性可套用於類別(Controller 級)或方法(Action 級),對應 Scope 為 Controller/Action。AllowMultiple 控制是否允許同類特性重複套用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved