Révision:
Lorsque vous lancez la passerelle ocelots, l’erreur suivante est signalée pour l’interface d’accès :
Code de statut : 502 ; Mauvaise Porte d’entrée Le projet est ASP.NET Core 3.1,La version utilisée par Ocelot est la 16.0.1
info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0] requestId : 0HM8JAOKL2C09:00000006, previousRequestId : no previous request id, message : EndpointRateLimiting n’est pas activé pour /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0] requestId : 0HM8JAOKL2C09:00000006, previousRequestId : pas d’identifiant de requête précédent, message : Code d’erreur : ConnectionToDownstreamServiceMessage d’erreur : Erreur de connexion au service en aval, exception : System.Net.Http.HttpRequestException : Les en-têtes de requête doivent contenir uniquement des caractères ASCII. at System.Net.Http.HttpHttpConnection.WriteStringAsync(String s) at System.Net.Http.HttpHttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer) at System.Net.Http.HttpHttpConnection.SendAsyncCore(requêteHttpRequestMessage, CancellationToken cancellationToken) at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, requêteHttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.HttpHttpConnectPool.SendWithRetryAsync(HttpRequestMessage request, boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.DiagnosticsHandler.SendAsync(requêteHttpRequestMessage, CancellationToken cancellationToken) at System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, requêteHttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts) sur Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) des erreurs trouvées dans ResponderMiddleware. Définition de la réponse d’erreur pour le chemin de requête :/test1/home/index, méthode de requête : GET En utilisant Fiddler pour attraper les paquets comme suit, j’ai découvert que le cookie a une chaîne chinoise, comme suit :
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=测试
Le navigateur écrit un code cookie (La valeur de code suivante n’est pas échappée) peut reproduire le problème :
Essayez de vider le cache de cookies et la passerelle revient à la normale comme montré sur l’image ci-dessous :
L’ordre d’exécution du middleware avec Ocelot est le suivant :
PreErrorResponderMiddleware PréMiddleware PréAuthentication Middleware d’authentification Middleware de préautorisation Middleware d’autorisation PreQueryStringBuilderMiddleware
(Fin)
|