2013-05-17 19 views
16

私はスタックのいくつかの他の記事を読んだが、これを動作させることはできない。curl Request with 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); 
    } 

これはBeeBoleのAPIである:私は私のWindowsマシン上のgitでcurlコマンドを実行したときに私はそれが働いていないASP.NETに変換するとき、それは私に正常に動作します。そのまっすぐな正体。 http://beebole.com/api上記を実行すると、次の500のエラーが発生します。

リモートサーバーからエラーが返されました:(500)内部サーバーエラー。

答えて

21

WebRequestのデフォルトのHTTPメソッドはGETです。それはAPIが

myReq.Method = "POST"; 

を期待しているものだと私はあなたが何かを掲示していると仮定し、POSTにそれを設定してみてください。テストとして、カールの例から同じデータを投稿します。

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

ありがとうございます。それは治療に効果があった。 – Dkong