首页 > 其他分享 >.NET Core WebApi接口ip限流实践

.NET Core WebApi接口ip限流实践

时间:2023-03-22 13:22:23浏览次数:40  
标签:WebApi Core 缓存 Redis 接口 限流 注册 services

.NET Core WebApi接口ip限流实践

前言

之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit 组件的限流策略。这个组件不做多的介绍,想了解详情可以去访问官方网址或者原文地址,地址在文章底部,本文只讲实现。

实现接口限流步骤

导包

image

第一步 配置服务

由于需要再appsettings.json中去读取数据,所以需要在Program.cs配置文件中配置服务

builder.Services.AddOptions();

第二步 写一个扩展方法注册RateLimit相关服务

using StackExchange.Redis;
using AspNetCoreRateLimit;
using AspNetCoreRateLimit.Redis;

namespace AspNetCoreRate
{
    public static class ConfigureRateLimit
    {
        public static void AddRateLimit(this IServiceCollection services,IConfiguration conf)
        {
            services.Configure<IpRateLimitOptions>(conf.GetSection("IpRateLimiting"));

            // 注册 Redis 缓存服务
            services.AddStackExchangeRedisCache(options =>
            {
                options.Configuration = conf.GetConnectionString("Redis");
            });
            // 注册 Redis 连接服务
            var redisOptions = ConfigurationOptions.Parse(conf.GetConnectionString("Redis"));
            redisOptions.Password = "密码";
            services.AddSingleton<IConnectionMultiplexer>(provider =>
            {
                return ConnectionMultiplexer.Connect(redisOptions);
            });
            services.AddRedisRateLimiting();

            services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
        }
        public static IApplicationBuilder UseRateLimit(this IApplicationBuilder app)
        {
            app.UseIpRateLimiting();
            return app;
        }
    }
}

第三步 注册服务

//注册服务
builder.Services.AddRateLimit(builder.Configuration);
//将内存缓存服务注册到依赖注入容器中,可写可不写。
//builder.Services.AddDistributedMemoryCache();

builder.Services.AddDistributedMemoryCache();这个服务,看看chatGPT的回答

image

如果你不想使用内存缓存,也可以直接移除AddDistributedMemoryCache()服务的注册。在你的Startup.cs文件中,找到ConfigureServices方法,注释掉或者删除以下代码:

services.AddDistributedMemoryCache();

这样就可以移除内存缓存服务的注册了。不过,需要注意的是,如果你的Redis出现问题,应用程序将无法使用备用缓存,这可能会影响应用程序的性能和可用性。因此,建议你在使用Redis作为分布式缓存时,仍然注册AddDistributedMemoryCache()服务。

标签:WebApi,Core,缓存,Redis,接口,限流,注册,services
From: https://www.cnblogs.com/ZYPLJ/p/17243389.html

相关文章

  • Centos安装部署netcore 包含Nginx,Supervisor等
    安装.NETCoreSDK安装libicu依赖yuminstalllibunwindlibicu注册dotnet的repository您需要注册Microsoft签名密钥并添加Microsoft产品提要sudorpm-Uvhhttps://packag......
  • .NET Core 3.0-preview3 发布
    .NETCore3.0Preview3已经发布,框架和ASP.NETCore有许多有趣的更新。这是最重要的更新列表。下载地址:​​https://aka.ms/netcore3download​​。​​.NETCore3.0......
  • .netcore 在Linux(Centos)使用Docker方式部署
    运行环境假设你已经安装好了.netcore运行环境,未配置可以看这篇​​[linux(centos)搭建.netcore运行环境]​​centos:7.2cpu:1核2G内存1M带宽docker:18.06.1-ce安装docke......
  • 10个小技巧助您写出高性能的ASP.NET Core代码
    今天这篇文章我们来聊一聊如何提升并优化ASP.NETCore应用程序的性能,本文的大部分内容来自翻译,当然中间穿插着自己的理解,希望对大家有所帮助!话不多说开始今天的主题吧!我们......
  • netcore强制使用https,把所有的HTTP请求转换为HTTPS
    使用HTTPS根据官方文档(​​https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.1&tabs=visual-studio#require-https​​),它建议A......
  • netcore读取、写入文件内容
    读取文件内容使用System.IO.StreamReader文档地址​​System.IO.StreamReader​​.FileStreamfileStream=newFileStream("file.txt",FileMode.Open);using(StreamRe......
  • 【ASP.NET Core】在node.js上托管Blazor WebAssembly应用
    由于Blazor-WebAssembly是在浏览器中运行的,通常不需要执行服务器代码,只要有个“窝”能托管并提供相关文件的下载即可。所以,当你有一个现成的Blazorwasm项目,没必要用其......
  • CorelDRAW Graphics Suite 2023 套件已经发布啦
    ​2023年3月14日14时,全球知名矢量制图及设计软件,CorelDRAWGraphicsSuite2023中文版(以下简称CorelDRAW2023)新品发布会在苏州举行,本次发布会由思杰马克丁软件有......
  • Framework升级到Core以及Dapper支持达梦数据库
    .NETFramework升级到.NETCore尝试使用try-convert工具没有成功手动处理类库将原有csproj文件内容替换如下<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup>......
  • 在http://ASP.NET Core中实现健康检查
    要实现运行状况检查,您需要在项目中安装 Microsoft.AspNetCore.Diagnostics.HealthChecks 。接下来,在ConfigureServices方法中添加运行状况检查中间件。publicvoi......