1、使用Nuget,对WebAPI项目添加WebApiThrottle的引用
2、进行注册,一般是在WebApiConfig的Register方法里添加,代码如下:
config.Filters.Add(new CustomThrottlingFilter() { Policy = new ThrottlePolicy() { //ip配置区域 IpThrottling = true, ClientThrottling = true, //端点限制策略配置会从EnableThrottling特性中获取。 EndpointThrottling = true } });
其中CustomThrottlingFilter是自己重写的ThrottlingFilter,也可以直接用默认配置。我自定义的CustomThrottlingFilter如下:
public class CustomThrottlingFilter : ThrottlingFilter { /// <summary> /// Sets the indentity. /// </summary> /// <param name="request">The request.</param> /// <returns>RequestIdentity.</returns> protected override RequestIdentity SetIdentity(HttpRequestMessage request) { var sessionId = string.Empty; try { var requestCookie = request.Headers.GetCookies().FirstOrDefault(); if (requestCookie != null) { foreach (var item in requestCookie.Cookies.Where(item => item.Name == "Session_Id")) { sessionId = item.Value; break; } } } catch (Exception) { sessionId = string.Empty; } return new RequestIdentity() { ClientKey = string.IsNullOrWhiteSpace(sessionId) ? sessionId : "anon", ClientIp = base.GetClientIp(request).ToString(), Endpoint = request.RequestUri.AbsolutePath.ToLowerInvariant() }; } }
3、对需要控制的接口或者控制器加上头标示
[EnableThrottling(PerMinute = 12)]//控制访问频率,每分钟最多12次
不需要控制访问频率的可以不加或者加上
[DisableThrotting]
来源 https://www.cnblogs.com/SzeCheng/p/5407316.html