Массив байтов как пользовательская кодировка заголовка HTTP? - PullRequest
0 голосов
/ 28 августа 2018

Я хочу добавить пользовательский заголовок HTTP (, хэшированный и подписанный ) , закодированный в кодировке utf8 (Encoding.UTF8.GetString). Если данные POSTed - IIS , Ошибка Bad Request (400).

Если пользовательский заголовок HTTP кодируется в кодировке base64, и проблем нет. Но наш партнер настаивает на использовании кодировки utf8.

Я хочу знать, вызван ли этот «Неверный запрос (400)» только IIS?

А вот и код:

    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(new 
    MediaTypeWithQualityHeaderValue("application/json"));
    HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, 
             "https://putsreq.com/AIWKVacHh2ok5FMGFpEg");
    var reqBody = "{'hello': 'world'}";
    msg.Content = new StringContent(reqBody);
    msg.Content.Headers.ContentType = new 
         MediaTypeWithQualityHeaderValue("application/json");
    var signature = SignMessage(reqBody); //hash and sign the message using 
                                          //private key
    var signatureString = Encoding.UTF8.GetString(signature); 
    msg.Headers.Add("signature", signature);
    try{
        var response = await client.SendAsync(msg);
        response.EnsureSuccessStatusCode();
        //Continue if success
   }catch(Exception ex){
        Trace.WriteLine("Exception: " + ex);
   }

1 Ответ

0 голосов
/ 29 августа 2018

Скопировано из комментария.

Заголовки HTTP имеют строгие правила относительно того, какие символы могут появляться,

https://tools.ietf.org/html/rfc7231#section-6.5.1

Данные UTF8 могут содержать недопустимые символы для заголовков, что может вызвать 400 таких ошибок. Вы можете захватить запрос и проанализировать (инструменты разработчика вашего браузера, или Fiddler, или Wireshark).

Base64, напротив, безопасный путь. А такие стандарты, как обычная проверка подлинности, используют Base64 для кодирования учетных данных пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...