2016-10-04 6 views
1

Я интегрируя сервис, который возвращает ключ, когда я запрос GET к URL, который находится в следующем формате:HttpClient доступа URL с «@» (на символ)

https://username:[email protected]/refresh.key 

Когда я получить доступ к URL в браузере, он возвращает новый ключ, как ожидается, по когда я делаю запрос GET с использованием HttpClient я получаю 401.

HttpClient _client = new HttpClient(); 
var response = await _client.GetAsync(@"https://username:[email protected]/refresh.key"); // Returns a 401 

Я думаю, что это что-то делать с '@' в URL, но я Не знаю, как это исправить, я попытался заменить его '%40', но когда я сделаю это t Я получаю UriFormatException.

Кто-нибудь знает, как это сделать?

+0

URIs с 'именем пользователя: password' учетных данные должны быть преобразованы в запросы, используя обычную проверку подлинности: http://www.baeldung.com/httpclient-4-basic-authentication – Dai

ответ

1

Вы должны изменить Authorization заголовок из HttpClient, вы можете попробовать следующий код;

HttpClient _client = new HttpClient(); 
byte[] usernamePasswordBytes = Encoding.ASCII.GetBytes("user:pass"); 
_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(usernamePasswordBytes)); 
var response = await _client.GetAsync(@"https://service.com/refresh.key"); 

PS: Такое имя пользователя: [email protected] запросы запрос BasicAuthentication так на самом деле вы пытаетесь сделать основной запрос аутентификации.

Надеется, что это работает для вас

1

Вам не нужно указывать учетные данные в URL-адресе. Вместо этого вы можете сделать:

using (var handler = new HttpClientHandler {Credentials = new NetworkCredential("username", "password")}) { 
    using (HttpClient _client = new HttpClient(handler)) { 
      var response = await _client.GetAsync(@"https://service.com/refresh.key"); 
    } 
}