Wie gedrosselt Anfragen in einem Web API?
Ich versuche zu implementieren Anfrage Drosselung über die folgenden:
Beste Art der Umsetzung Anfrage-Drosselung in ASP.NET MVC?
Habe ich gezogen, dass der code in meiner Lösung und dekoriert eine API-Endpunkt-controller mit dem Attribut:
[Route("api/dothis/{id}")]
[AcceptVerbs("POST")]
[Throttle(Name = "TestThrottle", Message = "You must wait {n} seconds before accessing this url again.", Seconds = 5)]
[Authorize]
public HttpResponseMessage DoThis(int id) {...}
Diese kompiliert werden, aber das Attribut code nicht getroffen zu werden, und die Drosselung nicht funktioniert. Ich bekomme keine Fehler aber. Was bin ich?
InformationsquelleAutor der Frage RobVious | 2013-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie zu verwirren action-Filter für eine ASP.NET MVC-controller-und action-Filter für eine ASP.NET Web-API-controller. Das sind 2 komplett verschiedene Klassen:
System.Web.Mvc.ActionFilterAttribute
-> das ist das, was ich aus dem linkSystem.Web.Http.Filter.ActionFilterAttribute
-> das ist, was Sie implementieren müssen, umEs scheint, dass das, was Sie gezeigt haben, ist eine Web-API controller-Aktion (eine, die erklärt, innerhalb einer controller-Ableitung von
ApiController
). Also, wenn Sie wollen, um benutzerdefinierte Filter anwenden, müssen Sie stammen ausSystem.Web.Http.Filters.ActionFilterAttribute
.Also lassen Sie uns gehen Sie vor und passen Sie den code für die Web-API:
wo die
GetClientIp
Methode stammt auspost
.Nun mit diesem Attribut können Sie auf Ihrem Web-API-controller Aktion.
InformationsquelleAutor der Antwort Darin Dimitrov
Die vorgeschlagene Lösung ist nicht korrekt. Es gibt mindestens 5 Gründe, die für es.
Gibt es viele weitere Probleme und versteckte Hindernisse zu lösen, die während der Umsetzung der Drosselung. Es gibt Kostenlose open-source-Optionen zur Verfügung. Ich empfehle zu schauen,https://throttlewebapi.codeplex.com/, zum Beispiel.
InformationsquelleAutor der Antwort lenny12345
WebApiThrottle ist ganz der champ jetzt in diesem Bereich.
Es ist super einfach zu integrieren. Fügen Sie einfach den folgenden
App_Start\WebApiConfig.cs
:Es ist als nuget-auch mit dem gleichen Namen.
InformationsquelleAutor der Antwort Korayem
Überprüfen Sie die
using
- Anweisungen in der Aktion filter. Wie man eine API-controller stellen sicher, dass Sie verweisen auf die ActionFilterAttribute inSystem.Web.Http.Filters
und nicht der inSystem.Web.Mvc
.InformationsquelleAutor der Antwort Ant P
Ich bin mit
ThrottleAttribute
zur Begrenzung der Berufung rate von meinem kurz-Nachricht senden-API, aber ich fand es nicht funktioniert manchmal. API genannt worden, viele Male, bis die Drosselklappe arbeitet der Logik, schließlich bin ich mitSystem.Web.Caching.MemoryCache
stattHttpRuntime.Cache
und das problem scheint gelöst.InformationsquelleAutor der Antwort Bruce
Meine 2 Cent hinzufügen, einige zusätzliche Informationen für den "Schlüssel" zu der Anfrage info über Parameter, so dass unterschiedliche Parameter-Anfrage ist erlaubt, von der selben IP.
Auch, meine kleine Besorgnis über die 'clientIP', ist es möglich, dass zwei verschiedene Benutzer verwenden den gleichen ISP hat die gleiche 'clientIP'? Wenn ja, dann ist eine client-meine gedrosselt werden falsch.
InformationsquelleAutor der Antwort RyanShao