.Net rest api-вызов не работает

Я пытаюсь подключиться к rest api, который отправляет ответ json. Когда я копирую и вставляю URL-адрес в браузере, в браузере появляется всплывающее окно для ввода имени пользователя и пароля.

При вводе имени пользователя и пароля (ID Active Directory и пароль) сервис отправляет ответ в формате JSON. HTTP-запрос и ответ

Но при попытке подключиться из кода возвращается следующая ошибка

{StatusCode: 401, ReasonPhrase: 'Unauthorized', версия: 1.1, содержимое: System.Net.Http.StreamContent, заголовки: {Keep-Alive: timeout = 15, max = 100 Подключение: Keep-Alive Дата: среда, 20 апреля 2016 11:38:45 GMT Сервер: Apache WWW-Authenticate: Basic realm = "Войдите, используя свои учетные данные AD-ENT, но не добавляйте в свой идентификатор префикс домена"
Content-Length: 455 Content-Type: text / html; charset = iso-8859-1}}

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"http://pro.abc.com/services/");

var authData = string.Format("{0}:{1}","username", "password");
var authHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(authData));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);

HttpResponseMessage response = await client.GetAsync("reportpro/reports/11824");

person sreevastav Paramban    schedule 20.04.2016    source источник
comment
Если вы используете Fiddler для проверки HTTP-потока в обоих случаях, вы заметите разницу в HTTP-трафике - это даст вам хорошее представление о том, где вы ошибаетесь. Например, использует ли браузер POST вместо GET для отправки запроса - трудно сказать, не глядя на базовый трафик.   -  person PhillipH    schedule 20.04.2016
comment
Оба используют Get. пожалуйста, проверьте ссылку HTTP-запроса и ответа в вопросе   -  person sreevastav Paramban    schedule 20.04.2016
comment
У вас нет разрешения на доступ к этому URL. Вот что такое 401   -  person Liam    schedule 20.04.2016
comment
@sreevastavParamban - трассировки ответа и запроса были для вашего кода, я рекомендовал получить трассировки как для вашего кода, так и для вызова вашего браузера. В любом случае рад, что вы нашли решение. Сделайте себе одолжение и загрузите Fiddler в любом случае - с его помощью вы довольно быстро обнаружите свои проблемы - это фантастический инструмент. :-)   -  person PhillipH    schedule 20.04.2016
comment
@PhillipH Спасибо за вашу помощь, как и было предложено, я загрузил Fiddler, и он очень полезен :-)   -  person sreevastav Paramban    schedule 21.04.2016


Ответы (1)


Код был идеальным, единственная проблема заключалась в том, что я использовал http вместо https.

При копировании и вставке URL-адреса в браузере браузер преобразовывал http в https. Следовательно, он отлично работал в браузере.

После изменения http на https в коде он работал отлично.

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"https://pro.abc.com/services/");
person sreevastav Paramban    schedule 20.04.2016