Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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; Поганий Ворота                                                                                                                                                                                                                                                                                                                                                                                                                      
Проєкт 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: Error connecting to downstream service, виключення: System.Net.Http.HttpRequestException: Заголовки запитів повинні містити лише ASCII-символи.
         на System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         на System.Net.Http.HttpConnection.WriteHeadersAsync(Заголовки HttpHeaders, String cookiesFromContainer)
         на System.Net.Http.Http.HttpConnection.SendAsyncCore (HttpRequestMessage request, CancellationToken cancellationToken)
         на System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         на System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, булевий doRequestAuth, CancellationToken cancellationToken)
         на System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage, CancellationToken cancellationToken)
         на 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=测试


Браузер записує код cookie (Наступне значення коду не зберігається) може відтворити проблему:

Консоль браузера записує файли cookie
https://www.itsvse.com/thread-4682-1-1.html
Спробуйте спорожнити кеш cookie, і шлюз повернеться до нормального стану, як показано на зображенні нижче:



Порядок виконання проміжного програмного забезпечення з Ocelot такий:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
AuthenticationMiddleware
PreAuthorisationMiddleware
AuthorisationMiddleware       
PreQueryStringBuilderMiddleware


(Кінець)




Попередній:ASP.NET Core отримує повне посилання на запит
Наступний:Тест продуктивності Redis Benchmark
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com