使用 ActionFilterAttribute 扩展限制 ASP.NET Web Api

我正在尝试向我的 Web Api 应用程序添加使用限制。但是,未实现自定义属性。


自定义属性


using System;

using System.Web;

using System.Web.Caching;

using System.Web.Mvc;


namespace MyApp.Filters

{

    public enum TimeUnit

    {

        Minute = 60,

        Hour = 3600,

        Day = 86400

    }


    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]

    public class ThrottleAttribute : ActionFilterAttribute

    {

        public TimeUnit TimeUnit { get; set; }

        public int Count { get; set; }


        public override void OnActionExecuting(ActionExecutingContext filterContext)

        {

            ...

        }

    }

}

控制器


namespace MyApp.Controllers

{

    public class GetUsersController : ApiController

    {

        [Throttle(TimeUnit = TimeUnit.Minute, Count = 5)]

        [Throttle(TimeUnit = TimeUnit.Hour, Count = 20)]

        [Throttle(TimeUnit = TimeUnit.Day, Count = 100)]

        public ICollection<Users> Get(int id)

        {

            ...

        }

    }

}

我走远了吗?不正确地实现属性?扩展错误的属性?我知道我正在使用System.Web.Mvc而不是System.Web.Http.Filters......但我所看到的所有资源都要求这样做。也许你有更好的答案?:)


慕侠2389804
浏览 200回答 2
2回答

慕哥6287543

确保您base.OnActionExecuting(filterContext)在代码中的某个时刻调用。如果您使用 .NET Standard(不了解 Core),那么您还应该记住在 App_Start\FilterConfig.cs 中注册您的过滤器:public static void RegisterGlobalFilters(GlobalFilterCollection filters){&nbsp; &nbsp; //add this part&nbsp; &nbsp; filters.Add(new ThrottleAttribute());}

FFIVE

问题是因为您使用的是ActionFilterAttributefrom System.Web.Mvc,而不是 from System.Web.Http.Filters,正如您在问题中提到的。MVC 过滤器只会作为 MVC 生命周期的一部分为控制器执行。API 控制器的 HTTP 过滤器也是如此。这意味着您的属性应该如下所示:using System.Web.Http.Controllers;using System.Web.Http.Filters;public class ThrottleAttribute : ActionFilterAttribute{&nbsp; &nbsp; // Note the different signature to what you have in your question.&nbsp; &nbsp; public override void OnActionExecuting(HttpActionContext actionContext)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; }}如果您现在在该方法上放置一个断点,并调用您的 API 控制器,它应该会命中它。如果您想将现有过滤器用于 MVC 控制器,那将很好用。
打开App,查看更多内容
随时随地看视频慕课网APP