2013-05-17 3 views
16

Ich habe einige andere Beiträge auf Stack gelesen, aber ich kann das nicht zur Arbeit bekommen. Es funktioniert gut auf meinem, wenn ich den curl Befehl in git auf meinem Windows-Rechner laufen, aber wenn ich es konvertieren ASP.NET es nicht funktioniert:curl Anfrage mit ASP.NET

private void BeeBoleRequest() 
    { 
     string url = "https://mycompany.beebole-apps.com/api"; 

     WebRequest myReq = WebRequest.Create(url);    

     string username = "e26f3a722f46996d77dd78c5dbe82f15298a6385"; 
     string password = "x"; 
     string usernamePassword = username + ":" + password; 
     CredentialCache mycache = new CredentialCache(); 
     mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password)); 
     myReq.Credentials = mycache; 
     myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); 

     WebResponse wr = myReq.GetResponse(); 
     Stream receiveStream = wr.GetResponseStream(); 
     StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
     string content = reader.ReadToEnd(); 
     Response.Write(content); 
    } 

Dies ist die BeeBole API ist. Sein hübsches gerades fwd. http://beebole.com/api, aber ich erhalte einen folgenden 500 Fehler, wenn ich das obige ausführen:

Der Remote-Server hat einen Fehler zurückgegeben: (500) Interner Serverfehler.

Antwort

21

Die Standard-HTTP-Methode für WebRequest ist GET. Versuchen Sie, es auf POST zu setzen, da dies das ist, was die API erwartet.

Ich nehme an, Sie posten etwas. Als Test werde ich die gleichen Daten aus ihrem Curl-Beispiel veröffentlichen.

string url = "https://YOUR_COMPANY_HERE.beebole-apps.com/api"; 
string data = "{\"service\":\"absence.list\", \"company_id\":3}"; 

WebRequest myReq = WebRequest.Create(url); 
myReq.Method = "POST"; 
myReq.ContentLength = data.Length; 
myReq.ContentType = "application/json; charset=UTF-8"; 

string usernamePassword = "YOUR API TOKEN HERE" + ":" + "x"; 

UTF8Encoding enc = new UTF8Encoding(); 

myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(enc.GetBytes(usernamePassword))); 


using (Stream ds = myReq.GetRequestStream()) 
{ 
ds.Write(enc.GetBytes(data), 0, data.Length); 
} 


WebResponse wr = myReq.GetResponse(); 
Stream receiveStream = wr.GetResponseStream(); 
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
string content = reader.ReadToEnd(); 
Response.Write(content); 
+1

Danke. Das hat Spaß gemacht. – Dkong