Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 40852|Răspunde: 0

[ASP.NET] Anteturile cererii Ocelot trebuie să conțină doar caractere ASCII

[Copiază linkul]
Postat pe 10.05.2021 15:24:29 | | | |
Recenzie:

Seria Ocelot (1) ASP.NET Gateway de bază în practică
https://www.itsvse.com/thread-9284-1-1.html


Când pornești gateway-ul oceloti, este raportată următoarea eroare pentru interfața de acces:
Cod de status: 502; Bad Gateway                                                                                                                                                                                                                                                                                                                                                                                                                      
Proiectul este ASP.NET Core 3.1,Versiunea folosită de Ocelot este 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: fără ID de cerere anterioară, mesaj: EndpointRateLimiting nu este activat pentru /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: fără id de cerere anterioară, mesaj: Cod de eroare: ConnectionToDownstreamServiceMesaj de eroare: Eroare conectându-se la serviciul downstream, excepție: System.Net.Http.HttpRequestException: Anteturile de cerere trebuie să conțină doar caractere ASCII.
         la System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         la System.Net.Http.HttpHttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer)
         la System.Net.Http.HttpHttpConnection.SendAsyncCore(cerere HttpRequestMessage, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, boolean doRequestAuth, CancellationToken cancellationToken)
         la System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         la System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
         la Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) erori găsite în ResponderMiddleware. Setarea răspunsului la eroare pentru calea cererii:/test1/home/index, metoda de cerere: GET
Folosind Fiddler pentru a prinde pachetele astfel, am descoperit că cookie-ul are un șir chinezesc, după cum urmează:




Host: localhost:5002
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: aaa=测试


Browserul scrie un cod pentru cookie-uri (Următoarea valoare a codului nu este scăpată) poate reproduce problema:

Consola browserului scrie cookie-uri
https://www.itsvse.com/thread-4682-1-1.html
Încearcă să golești cache-ul de cookie-uri și gateway-ul revine la normal, așa cum se vede în imaginea de mai jos:



Ordinea de execuție a middleware-ului cu Ocelot este următoarea:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
Middleware de autentificare
PreAuthorisationMiddleware
Middleware de autorizare       
PreQueryStringBuilderMiddleware


(Sfârșit)




Precedent:ASP.NET Core primește linkul URL complet al cererii
Următor:Testul de performanță Redis Benchmark
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com