2014-07-07 17 views
9

Ich versuche, eine einfache Anfrage an die Basecamp API zu machen, ich befolge die Anweisungen zur Verfügung gestellt in einem Beispiel Benutzer-Agent und meine Anmeldeinformationen, aber ich bekomme immer eine 403 Forbidden Antwort zurück.HttpClient und Einstellung Autorisierung Header

Meine Zugangsdaten sind definitiv richtig, also ist es ein Fall von meiner Anfrage/Anmeldeinformationen falsch eingestellt?

Das ist, was ich habe (entfernt persönliche Info):

var httpClient = new HttpClient(); 
var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("User-Agent", "MyApp [EMAIL ADDRESS]") }); 

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", 
      Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "[USERNAME]", "[PASSWORD]")))); 

var response = await httpClient.PostAsync("https://basecamp.com/[USER ID]/api/v1/projects.json", content); 
var responseContent = response.Content; 

using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync())) 
{ 
    Console.WriteLine(await reader.ReadToEndAsync()); 
} 

Antwort

15

Ein kurzer Blick über die Dokumentation scheint darauf hinzudeuten, dass der projects.json Endpunkt der folgenden in dem Körper des POST akzeptiert:

{ 
    "name": "This is my new project!", 
    "description": "It's going to run real smooth" 
} 

Sie senden die User-Agent als POST-Nachricht. Ich würde vorschlagen, dass Sie Ihren Code wie folgt ändern:

var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "[USERNAME]", "[PASSWORD]"))); 
    using (var httpClient = new HttpClient()) 
    { 
     httpClient.DefaultRequestHeaders.Add("User-Agent", "MyApp [EMAIL ADDRESS]"); 
     httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); 
     var response = await httpClient.PostAsJsonAsync(
      "https://basecamp.com/[USER ID]/api/v1/projects.json", 
      new { 
       name = "My Project", 
       description = "My Project Description" 
      }); 

     var responseContent = await response.Content.ReadAsStringAsync(); 
     Console.WriteLine(responseContent); 
    } 

Diese Beiträge der Nutzlast, wie in der Dokumentation angegeben und setzt Ihr User-Agent in den Köpfen, wie es sein sollte.

+0

Danke, musste dies ein wenig ändern, aber es zur Arbeit – DGibbs

+0

Wurde ohne IDE, sollte wahrscheinlich gesagt haben, dass :) –

+0

Bitte auch darüber nachdenken, warum die Umhüllung des Clients in eine kurzlebige 'using' _might_ schlecht sein: http: //stackoverflow.com/questions/22560971/what-is-the-overhead-of-creating-a-new-httpclient-per-call-in-a-webap-client – mmlac

Verwandte Themen