Заголовок авторизации веб-службы, возвращающий нечетные символы в службе - PullRequest
0 голосов
/ 28 января 2020

Я написал приложение WPF, которое отправляет запрос POST WebHTTPRequest службе WCF. Служба требует windows учетных данных для выполнения операций на сервере. Когда служба получает HTTP-запрос, она не может проанализировать заголовок авторизации.

POST-запрос начинается следующим образом.

HttpWebRequest req = WebRequest.CreateHttp(url);
req.ContentType = "application/json;charset=UTF-8";
req.Accept = "application/json";
req.Headers.Add("Authorization", Base64Encode(Details.username + ":" + Details.password + ":" + Details.domain));
req.Method = "POST";
byte[] reqBytes = Encoding.ASCII.GetBytes(body.ToString());

И принимается на службу, подобную этой

IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;

if (headers["Authorization"] != null)
{
    cred = headers["Authorization"];
} else
{
    HttpContext.Current.Response.Write(result);
    return;
}

Я печатаю переменную "cred" в файл журнала, и то, что я получаю, начинается примерно так: "敎 潧 楴 瑡 ⁥ 䥙 䝉 䅺 䝙 䝙", что, совершенно очевидно, неправильно. Кто-нибудь может сказать мне, почему я получаю этот вывод в отличие от ввода, состоящего из символов Engli sh, с которыми я отправил запрос?

1 Ответ

0 голосов
/ 28 января 2020

Проблема в том, что вы закодировали строку в кодировке UTF-8 в Base64. Вы указали, что тип кодировки для вашего JSON файла здесь UTF-8:

req.ContentType = "application/json;charset=UTF-8";

Так что, если вы попытаетесь закодировать вашу Аутентификацию в Base64, это разрушит вашу строку.

req.Headers.Add("Authorization", Base64Encode(Details.username + ":" + Details.password + ":" + Details.domain));

Попробуйте другой способ кодирования строки

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