Open Closed

AspNetCoreRateLimit not working #3064


User avatar
0
JeffreyKhor created

Hi,

Below is my ABP details information:

ABP Framework version: v4.4.3

UI type: Angular

DB provider: EF Core

Tiered (MVC) or Identity Server Separated (Angular): yes

We would like to ask, we have been using the AspNetCoreRateLimit package from this link: https://www.nuget.org/packages/AspNetCoreRateLimit/

and we had been followed tutorial link as below: https://blog.elmah.io/rate-limiting-api-requests-with-asp-net-core-and-aspnetcoreratelimit/ https://www.c-sharpcorner.com/article/implement-rate-limiting-in-asp-net-core-web-api/ https://code-maze.com/aspnetcore-web-api-rate-limiting/

but still not working, its still allow concurrent sending request within milliseconds, anyone have been facing this issue before?

Regards, Jeffrey Khor


9 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Are there any error or warning logs?

  • User Avatar
    0
    JeffreyKhor created

    no error or any warning logs, below are files that i put in according to the tutorial:

    startup.cs:

    using AspNetCoreRateLimit;
    //using AspNetCoreRateLimit.Redis;
    using DevExpress.AspNetCore;
    using DevExpress.AspNetCore.Reporting;
    using DevExpress.AspNetCore.Reporting.QueryBuilder;
    using DevExpress.AspNetCore.Reporting.ReportDesigner;
    using DevExpress.AspNetCore.Reporting.WebDocumentViewer;
    using DevExpress.XtraReports.Security;
    using DevExpress.XtraReports.Services;
    //using DevExpress.XtraReports.Web.Extensions;
    //using DevExpress.XtraReports.Web.ReportDesigner.Services;
    //using DevExpress.XtraReports.Web.WebDocumentViewer;
    //using KMS.EntityFrameworkCore;
    using KMS.HubConfig;
    using KMS.Reports;
    //using KMS.Services;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    //using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    //using StackExchange.Redis;
    using System;
    //using System.Collections.Generic;
    //using Volo.Abp.Users;
    
    namespace KMS
    {
        public class Startup
        {
            private readonly IConfiguration appConfiguration;
    
            public Startup(IConfiguration _appConfiguration)
            {
                appConfiguration = _appConfiguration;
            }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddApplication<KMSHttpApiHostModule>();
    
                //added
                services.AddCors(options =>
                {
                    options.AddPolicy("AllowAllHeaders",
                        builder =>
                        {
                            builder.AllowAnyOrigin()
                                    .AllowAnyHeader()
                                    .AllowAnyMethod();
                        });
                });
    
                //added
                services.AddSignalR(options =>
                {
                    options.EnableDetailedErrors = true;
                });
    
                //added
                services.AddControllers();
    
                services.AddOptions();
                services.AddMemoryCache();
                services.Configure<IpRateLimitOptions>(appConfiguration.GetSection("IpRateLimit"));
                services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
                services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
                services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
                services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
                services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
                services.AddInMemoryRateLimiting();
                //services.AddHttpContextAccessor();
    
                ScriptPermissionManager.GlobalInstance = new ScriptPermissionManager(ExecutionMode.Unrestricted);
            }
    
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
            {
                app.InitializeApplication();
    
                app.UseDevExpressControls();
                //added
                app.UseCors("AllowAllHeaders");
    
                app.UseIpRateLimiting();
    
                //added
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                    endpoints.MapHub<MyMessageHub>("/signalrkms");
                });
    
                DevExpress.XtraReports.Web.ClientControls.LoggerService.Initialize(ProcessException);
            }
    
            void ProcessException(Exception ex, string message)
            {
                // Log exceptions here. For instance:
                System.Diagnostics.Debug.WriteLine("[{0}]: Exception occured. Message: '{1}'. Exception Details:\r\n{2}",
                    DateTime.Now, message, ex);
            }
        }
    }
    
    appsettings.json:
    
    {
    ...
    "IpRateLimit": {
        "EnableEndpointRateLimiting": true,
        "StackBlockedRequests": false,
        "RealIPHeader": "X-Real-IP",
        "ClientIdHeader": "X-ClientId",
        "HttpStatusCode": 429,
        "GeneralRules": [
          {
            "Endpoint": "*:/api/app/kiosks",
            "Period": "30s",
            "Limit": 1
          }
        ]
      }
    }
    
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    There is no code in ABP that may affect this feature, you can try it without ABP framework.

  • User Avatar
    0
    JeffreyKhor created

    this is strange, i had tried on non ABP framework, no issue, and its working!!! only when with ABP framework causing issue

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Can you share a project to reproduce the problem?

    You can use the free template project. https://abp.io/get-started

    liming.ma@volosoft.com

  • User Avatar
    0
    JeffreyKhor created

    i had emailed you with the template project with the version 4.4.3, pls check ya, thanks in advance!!!

    Regards, Jeffrey Khor

  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    ok, thanks I will check it.

  • User Avatar
    1
    maliming created
    Support Team Fullstack Developer

    hi

    Move the code from startup to module

  • User Avatar
    0
    JeffreyKhor created

    hi

    Move the code from startup to module

    Hi, it worked!!! thanks!!!

    Regards, Jeffrey Khor

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
Do you need assistance from an ABP expert?
Schedule a Meeting
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.2.0-preview. Updated on March 20, 2025, 18:00