Ответ типа данных Json API ограничения скорости IP - PullRequest
0 голосов
/ 05 марта 2019

https://github.com/stefanprodan/AspNetCoreRateLimit Я использую это промежуточное ПО для ограничения скорости приложения asp.net core 2 rest api.но проблема в том, что эта библиотека возвращает ответ html.Но мне нужен ответ JSON, чтобы решить мою проблему

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вы можете настроить свой ответ в IpRateLimitMiddleware.

IpRateLimitMiddleware

public class MyIpRateLimitMiddleware : IpRateLimitMiddleware
{
    public MyIpRateLimitMiddleware(RequestDelegate next
        , IOptions<IpRateLimitOptions> options
        , IRateLimitCounterStore counterStore
        , IIpPolicyStore policyStore
        , IRateLimitConfiguration config
        , ILogger<IpRateLimitMiddleware> logger) 
            : base(next, options, counterStore, policyStore, config, logger)
    {
    }

    public override Task ReturnQuotaExceededResponse(HttpContext httpContext, RateLimitRule rule, string retryAfter)
    {
        //return base.ReturnQuotaExceededResponse(httpContext, rule, retryAfter);
        var message = new { rule.Limit, rule.Period, retryAfter };

        httpContext.Response.Headers["Retry-After"] = retryAfter;

        httpContext.Response.StatusCode = 200;
        httpContext.Response.ContentType = "application/json";

        return httpContext.Response.WriteAsync(JsonConvert.SerializeObject(message));
    }
}

Настройка промежуточного программного обеспечения в Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //app.UseIpRateLimiting();
        app.UseMiddleware<MyIpRateLimitMiddleware>();
        //your rest middlware
    }
0 голосов
/ 05 марта 2019

Читать документы

Если запрос блокируется, клиент получает текстовый ответ, подобный этому:

Status Code: 429
Retry-After: 58
Content: API calls quota exceeded! maximum admitted 2 per 1m.

Вы можете настроить ответ, изменив эти параметры HttpStatusCode и QuotaExceededMessage, , если вы хотите реализовать свой собственный ответ, вы можете переопределить IpRateLimitMiddleware.ReturnQuotaExceededResponse. Значение заголовка Retry-After выражается в секундах. (выделение мое)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...