繁体   English   中英

带ActionFilterAttribute扩展的Throttle ASP.NET Web Api

[英]Throttle ASP.NET Web Api with ActionFilterAttribute extension

我正在尝试向我的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 ...,但是我所看到的所有资源都恰恰要求这样做。 也许您有一个更好的答案? :)

确保在代码中的某个时刻正在调用base.OnActionExecuting(filterContext) 如果使用的是.NET Standard(不了解Core),则还应该记住在App_Start \\ FilterConfig.cs中注册过滤器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //add this part
    filters.Add(new ThrottleAttribute());
}

问题是因为您使用的是System.Web.Mvc ActionFilterAttribute ,而不是问题中提到的System.Web.Http.Filters

作为MVC生命周期的一部分,将仅对控制器执行MVC筛选器。 API控制器的HTTP过滤器也是如此。 这意味着您的属性应如下所示:

using System.Web.Http.Controllers;
using System.Web.Http.Filters;

public class ThrottleAttribute : ActionFilterAttribute
{
    // Note the different signature to what you have in your question.
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //
    }
}

如果现在在该方法上设置一个断点,并调用您的API控制器,则应该将其击中。

如果要将现有的过滤器用于MVC控制器,则可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM