Core两边件成功Web-经常使用.NET-API流量限度指南 (core左边的工具如何恢复)
在Core中,咱们可以经常使用ASP.NETCore的两边件来对WebAPI启动流量限度。ASP.NETCore提供了一个名为RateLimit的开源库,可以繁难地成功流量限度性能。上方将详细引见如何在.NETCore中经常使用RateLimit库对WebAPI启动流量限度,并给出相应的示例代码。
装置RateLimit库
首先,咱们须要在.NETCore名目中装置RateLimit库。可以经过NuGet包治理器或许dotnet命令行工具来装置该库。
dotnetaddpackageAspNetCoreRateLimit
性能流量限度
在名目标Startup.cs文件中,咱们须要启动一些性能来启用流量限度性能。详细步骤如下:
导入关系命名空间
在Startup.cs文件中,导入AspNetCoreRateLimit命名空间。
usingAspNetCoreRateLimit;
减少流量限度性能
在ConfigureServices方法中,减少流量限度性能。
publicvoidConfigureServices(IServiceCollectionservices){//减少流量限度性能services.AddOptions();services.AddMemoryCache();services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));services.AddSingleton<IIpPolicyStore,MemoryCacheIpPolicyStore>();services.AddSingleton<IRateLimitCounterStore,MemoryCacheRateLimitCounterStore>();services.AddSingleton<IRateLimitConfiguration,RateLimitConfiguration>();}
减少流量限度两边件
在Configure方法中,减少流量限度两边件。
publicvoidConfigure(IlicationBuilderapp,IWebHostEnvironmentenv){//减少流量限度两边件app.UseIpRateLimiting();//其余两边件性能//...}
减少流量限度性能文件
在appsettings.json文件中,减少流量限度的性能项。
{"IpRateLimiting":{"EnableEndpointRateLimiting":true,"StackBlockedRequests":false,"RealIpHeader":"X-Real-IP","ClientIdHeader":"X-ClientId","HttpStatusCode":429,"GeneralRules":[{"Endpoint":"*","Period":"1s","Limit":5}]},"IpRateLimitPolicies":{"EndpointRateLimitPolicy":{"Period":"1s","Limit":10}}}
以上性能中,咱们设置了一个通用规定(GeneralRules),即每秒最多准许5个恳求。可以依据实践需求启动调整。
经常使用流量限度
在须要启动流量限度的WebAPI接口上,咱们可以经过经常使用RateLimit个性来启用流量限度。详细步骤如下:
导入关系命名空间
在须要启动流量限度的控制器文件中,导入AspNetCoreRateLimit命名空间。
usingAspNetCoreRateLimit;
减少流量限度个性
在须要启动流量限度的接口方法上,减少RateLimit个性。
[RateLimit("EndpointRateLimitPolicy")][HttpGet]publicIActionResultGet(){//接口逻辑//...}
在上述代码中,咱们经常使用了名为EndpointRateLimitPolicy的流量限度战略。可以依据实践需求启动调整。
完整示例代码
上方给出一个完整的示例代码,展示如何在.NETCore中经常使用RateLimit库对WebAPI启动流量限度。假定咱们要对一个繁难的GET接口启动流量限度。
usingAspNetCoreRateLimit;usingMicrosoft.AspNetCore.Builder;usingMicrosoft.AspNetCore.Hosting;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Hosting;namespaceRateLimitExample{publicclassStartup{publicStartup(IConfigurationconfiguration){Configuration=configuration;}publicIConfigurationConfiguration{get;}publicvoidConfigureServices(IServiceCollectionservices){services.AddControllers();//减少流量限度性能services.AddOptions();services.AddMemoryCache();services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));services.AddSingleton<IIpPolicyStore,MemoryCacheIpPolicyStore>();services.AddSingleton<IRateLimitCounterStore,MemoryCacheRateLimitCounterStore>();services.AddSingleton<IRateLimitConfiguration,RateLimitConfiguration>();}publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv){if(env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();//减少流量限度两边件app.UseIpRateLimiting();app.UseEndpoints(endpoints=>{endpoints.MapControllers();});}}[ApiController][Route("api/[controller]")]publicclassTestController:ControllerBase{[RateLimit("EndpointRateLimitPolicy")][HttpGet]publicIActionResultGet(){//接口逻辑returnOk("Hello,World!");}}}
在上述代码中,须要将appsettings.json性能文件中的IpRateLimiting和IpRateLimitPolicies节点交流为实践的性能。
以上就是在.NETCore中经常使用RateLimit库对WebAPI启动流量限度的详细步骤和示例代码。经过这种模式,咱们可以繁难地对WebAPI启动流量控制,以保障系统的稳固性和可用性。
Visual Studio 2019 core 3.0 具体步骤如下图: 此处我们选择API(新手不推荐选择空项目,选择API系统会为我们自动创建WebApi需要的一些配置文件等),Https配置这一项我们暂时不勾选,目前我们不配置Https。 F5运行项目,然后就可以看到微软为我们写好的一个天气预报示例webapi了,这里只有一个Get请求示例,返回值为json格式。 注意: (); 和();方法成对出现, 这是 core3.0中的最新写法 ConfigureServices方法 用来向容器中注册服务,注册好的服务可以在其他地方进行调用. Configure方法 用来配置中间件管道,即如何响应http请求. 1 右键删除系统默认创建的 和 2 新建一个控制器,命名: 问题来了,为啥直接给打开 weatherforecast ,而且还404了,别急,往下看。 (┬_┬)怎么还是404?别急继续往下看上面增加 action 虽然能达到想要的结果,但是每次新建一个 Controller 都有写个 action 万一要是忘记了又要忙乎半天,有没有一劳永逸的办法呢? 继续往下看: 1.首先去掉Controller里的 Route 和 ApiController 2.修改 ,增加路由模版:今天就到这里,后期继续完善我们的webapi。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。