Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 40852|Отговор: 0

[ASP.NET] Заглавията на Ocelot Request трябва да съдържат само ASCII символи

[Копирай линк]
Публикувано в 10.05.2021 г. 15:24:29 ч. | | | |
Преглед:

Серия Ocelot (1) ASP.NET Core Gateway на практика
https://www.itsvse.com/thread-9284-1-1.html


Когато стартирате ocelot шлюза, се докладва следната грешка за интерфейса за достъп:
Код на статуса: 502; Bad Gateway                                                                                                                                                                                                                                                                                                                                                                                                                      
Проектът е ASP.NET Core 3.1,Версията, използвана от Ocelot, е 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: няма предишен идентификатор на заявка, съобщение: EndpointRateLimiting не е активиран за /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: няма предишен идентификатор на заявка, съобщение: Error Code: ConnectionToDownstreamServiceError Message: Грешка при свързване към downstream услуга, изключение: System.Net.Http.HttpRequestException: Заглавията на заявките трябва да съдържат само ASCII символи.
         на System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer)
         на System.Net.Http.HttpHttpConnection.SendAsyncCore (HttpRequestMessage request, CancellationToken cancellationToken)
         в System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         в System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
         в Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) са открити грешки в ResponderMiddleware. Задаване на отговор на грешка за пътя на заявката:/test1/home/index, метод на заявка: GET
Използвайки Fiddler за улавяне на пакетчета по следния начин, открих, че бисквитката има китайски низ, както следва:




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=测试


Браузърът записва код за бисквитки (Следната стойност на кода не се избягва) може да възпроизведе проблема:

Конзолата на браузъра пише бисквитки
https://www.itsvse.com/thread-4682-1-1.html
Опитайте да изпразните кеша с бисквитки и шлюзът се връща към нормалното, както е показано на изображението по-долу:



Редът на изпълнение на междинния софтуер с Ocelot е следният:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
AuthenticationMiddleware
PreAuthorisationMiddleware
AuthorisationMiddleware       
PreQueryStringBuilderMiddleware


(Край)




Предишен:ASP.NET Core получава пълния URL линк към заявката
Следващ:Тест за производителност в Redis Benchmark
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com