ASP.NET Coreフィルタ

4735 ワード

Attributeを継承する、IActionFilterは独自のフィルタクラスを実現し、Startup,mvcサービスに注入する.グローバルはフィルタリングされ、任意のコントローラ、action実行前と実行後にフィルタリングされます.
Attributeプロパティによってフィルタしたい場所を識別して局所フィルタリング(controller,action)を実現する
IActionFilter継承には、アクション実行後とアクション実行前の2つの方法が必要です.
注意点:カスタムフィルタ注入を実現すると、このカテゴリのフィルタの特性が実現する.実行順は、グローバルフィルタOnActionExecuting、さらに特性OnActionExecuting、さらに特性OnActionExecuted、最後にフィルタOnActionExecutedである.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            //services.AddMvc(options => options.Filters.Add(new MyActionFilters()));
        }

 
 
    /// 
    ///   Attribute,IActionFilter         ,   Startup,mvc     .       ,     action             
    ///   Attribute                  (controller,action)
    /// IActionFilter          OnActionExecuted,OnActionExecuting,              
    /// 
    public class MyActionFilters : Attribute, IActionFilter
    {
        /// 
        ///      
        /// 
        /// 
        public void OnActionExecuted(ActionExecutedContext context)
        {
            Console.WriteLine("**********************       ****************************");
        }

        /// 
        ///      
        /// 
        /// 
        public void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("**********************       ****************************");
        }
    }

 

只要返回ContentResult就会短路,后面的所有逻辑不会再处理

public class MyActionFilterAttribute : Attribute, IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext context)
        {
            context.Result = new ContentResult()
            {
                Content = "Resource unavailable - header should not be set"
            };
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            var s = "Attribute_OnActionExecuting";
        }
    }

 
転載先:https://www.cnblogs.com/MingQiu/p/8425609.html