Ich verwende Microsoft.aspnetcore.Ratelimiting und füge eine neue Richtlinie hinzu, die einschränkt, wie viele Anrufe pro Minute für einen bestimmten Apikey ausgeführt werden können. Die meisten Schlüssel haben das gleiche Anruflimit, aber einige Schlüssel haben mehr oder weniger als die Standardeinstellung. Ich möchte den Code so aktualisieren, dass die Suche des Schlüssels, um festzustellen, ob er unterschiedliche Preise auf asynchronisierte Weise erfolgt oder nicht, aber ich erhalte immer wieder Kompilierfehler, wenn ich dem Func, der übergeben wird, einen asynchronisierten Spitznamen hinzufüge. Ich vermute, das ist nicht möglich, aber vielleicht gibt es eine andere Möglichkeit, dies zu tun? < /p>
unten ist der Code < /p>
Ich verwende Microsoft.aspnetcore.Ratelimiting und füge eine neue Richtlinie hinzu, die einschränkt, wie viele Anrufe pro Minute für einen bestimmten Apikey ausgeführt werden können. Die meisten Schlüssel haben das gleiche Anruflimit, aber einige Schlüssel haben mehr oder weniger als die Standardeinstellung. Ich möchte den Code so aktualisieren, dass die Suche des Schlüssels, um festzustellen, ob er unterschiedliche Preise auf asynchronisierte Weise erfolgt oder nicht, aber ich erhalte immer wieder Kompilierfehler, wenn ich dem Func, der übergeben wird, einen asynchronisierten Spitznamen hinzufüge. Ich vermute, das ist nicht möglich, aber vielleicht gibt es eine andere Möglichkeit, dies zu tun? < /p> unten ist der Code < /p> [code]builder.Services.AddRateLimiter(options => { options.OnRejected = async (context, cancellationToken) => { if (context.Lease.TryGetMetadata(MetadataName.RetryAfter, out var retryAfter)) { context.HttpContext.Response.Headers.RetryAfter = ((int)retryAfter.TotalSeconds).ToString(NumberFormatInfo.InvariantInfo); }
context.HttpContext.Response.StatusCode = StatusCodes.Status429TooManyRequests; await context.HttpContext.Response.WriteAsync("Too many requests for your Api Key. Please try again later.", cancellationToken); };
options.AddPolicy("ApiKey_Minute", context => { var keyService = context.RequestServices.GetRequiredService(); var apiKey = context.Request.Headers["X-Api-Key"].FirstOrDefault(); var defaultLimit = RateLimitPartition.GetTokenBucketLimiter("defaultLimit", _ => new TokenBucketRateLimiterOptions { TokenLimit = 5, TokensPerPeriod = 5, ReplenishmentPeriod = TimeSpan.FromMinutes(1), QueueLimit = 0, AutoReplenishment = true }); ; if(string.IsNullOrWhiteSpace(apiKey)) { return defaultLimit; } //currently this is not async but ideally should be var keyInfo = keyService.LookupKey(apiKey); if(keyInfo == null) { return defaultLimit; } var perMinuteLimiter = RateLimitPartition.GetFixedWindowLimiter( partitionKey: $"{apiKey}-minute", factory: _ => new FixedWindowRateLimiterOptions { PermitLimit = keyInfo.CallsPerMinute ?? 5, //TODO update to 50 Window = TimeSpan.FromMinutes(1), QueueProcessingOrder = QueueProcessingOrder.OldestFirst, QueueLimit = 2 } );
Ich versuche, ein ASP.NET -Kern -Web -API -Projekt in meinem Linux -System (Ubuntu 22.04) zu erstellen und mit dem Befehl dotnet restore oder dotnet New ein Problem zu stellen: Der Prozess bleibt...
Ich schreibe eine Airflow -Aufgabe zum Lesen eines großen CSV und speichern Sie sie in der PostGRESQL -Datenbank. Es ist jedoch asynchron und ich weiß nicht, wie ich es in den Luftstrom...
Ich denke, ich verstehe Async/warte, aber ich bin verwirrt durch einen Teil, den ich in meinem Code in einem sehr verbreiteten Szenario erreicht habe. Bevor diese Funktion alle Werte zurückgibt, muss...
Problembeschreibung: Ich habe versucht, eine Website mit Selen zu kratzen, aber ich war nicht erfolgreich, weil ich nicht in der Lage war, die Webelemente zu erkennen. Ich muss täglich...