2017-08-14 71 views
0

我正在嘗試api並接收數據。我得到了API的用戶名和密碼,但當我嘗試連接時,我得到了未經授權的請求。我的東西是錯誤的,我的請求頭-authentication。 這裏是我的代碼:無法使用正確的用戶名和密碼訪問API(c#-HttpClient) - 未經授權的請求

using ApiData; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Text; 
using System.Threading.Tasks; 

namespace GetDataFromApi 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      string uri1 = "https://api.intrinio.com/companies?ticker=AAPL"; 
      ConnectToApi newapi = new ConnectToApi("username", "password", uri1); 
      Console.ReadLine(); 
     } 

     public class ConnectToApi 
     { 

      public string Username { get; set; } 
      public string Password { get; set; } 
      public string Request_url { get; set; } 

      public ConnectToApi(string username, string password, string url) 
      { 
       this.Username = username; 
       this.Password = password; 
       this.Request_url = url; 
       GetAPIToken(Username, Password, Request_url); 

      } 

      private static async void GetAPIToken(string userName, string password, string apiBaseUri) 
      { 
       try 
       { 


        using (var client = new HttpClient()) 
        { 
         //setup client 
         client.BaseAddress = new Uri(apiBaseUri); 
         client.DefaultRequestHeaders.Accept.Clear(); 
         client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{userName}:{password}"))); 
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


         //send request 
         var responseMessage = await client.GetStringAsync(apiBaseUri); 



        } 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine(e.Message); 

       } 
      } 
     } 
    } 

} 

,如果你對我的代碼,我將非常樂意傾聽任何意見。

謝謝。

lidor

+2

它爲我工作 - 這意味着你應該立即改變你的密碼。 – Crowcoder

回答

0

這可能幫助

你需要得到RestSharp這個工作

var client = new RestClient("https://api.intrinio.com/companies?ticker=AAPL"); 
var request = new RestRequest(Method.GET); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("authorization", "Basic MGU0NWIxZmIwZDFlMGNkMDEzY2Y2Y2I5MmRlNjk2N2M6MjNjYjM3OTQ3ZmFmMjQ0OWI1MWRjMWQ1NGU2ZGE1Zjc="); 
IRestResponse response = client.Execute(request); 

,你可以嘗試將其轉換爲一個對象

try 
     { 
      dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(response.Content, new Newtonsoft.Json.JsonSerializerSettings() { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }); 
      return x; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
      return null; 
     } 

我建議使用http://json2csharp.com/ 來cr eate你的C#對象
更多信息

要獲得用於授權您可以使用此方法

public static string Base64Encode(string key) 
{ 
    var value = System.Text.Encoding.UTF8.GetBytes(key); 
    return System.Convert.ToBase64String(value); 
} 

得到確切值,確保用戶名和密碼被連接,(價值用戶名第一,密碼第二),然後傳遞給方法

+0

感謝您的幫助。在「request.AddHeader(」授權「,」基本MGU0NWIxZmIwZDFlMGNkMDEzY2Y2Y2I5MmRlNjk2N2M6MjNjYjM3OTQ3ZmFmMjQ0OWI1MWRjMWQ1NGU2ZGE1Zjc =「)」我應該把用戶名和密碼放在一起嗎? – Lidor

+0

該代碼包含您的用戶名和密碼,他們是URL 64位基地編碼,如果你在授權谷歌上解碼,你可以看到它是你的用戶名和密碼, –

+0

它的工作!感謝您的幫助!! – Lidor

相關問題