2017-07-18 13 views
0

CURLを使用するvultr.com APIを使用しようとしています。私はいくつかの異なる呼び出しでAPI呼び出しを正常に完了しましたが、特に動作しません。 API https://www.vultr.com/api/に関するドキュメントは次のとおりです。CURLに似たC#API POST

サーバ/作成とファイアウォール/ rule_createをほぼ同じコードで正しく動作させることができましたが、server/rebootコマンドでは機能しません。ここに私はうまく機能しているAPIのポストのコードです。

public static void AddIpToFirewall(string ip,string fireWallGroupId) 
{ 
    string Data = "FIREWALLGROUPID=" + fireWallGroupId + "&direction=in&ip_type=v4&protocol=tcp&subnet=" + ip + "&subnet_size=32&port=80"; 
    string Reponse = String.Empty; 
    StreamWriter Sw = null; 
    StreamReader Sr = null; 
    try 
    { 
     HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://api.vultr.com/v1/firewall/rule_create"); 
     Req.Method = "POST"; 
     Req.ContentType = "application/x-www-form-urlencoded"; 
     Req.ContentLength = Data.Length; 
     Req.Headers.Add(ApiKey); 
     using (var sw = new StreamWriter(Req.GetRequestStream())) 
     { 
      sw.Write(Data); 
     } 
     Sr = new 
     StreamReader(((HttpWebResponse)Req.GetResponse()).GetResponseStream()); 
     Reponse = Sr.ReadToEnd(); 
     Sr.Close(); 
    } 
    catch (Exception ex) 
    { 
     if (Sw != null) 
      Sw.Close(); 
     if (Sr != null) 
      Sr.Close(); 
     Console.WriteLine(ex.Message + "\r\n\r\n'error with vultr..."); 
    } 
} 

ここでは動作しないコードを示します。ファイアウォールのPOSTコマンドとほとんど同じです。

public static void RebootCommand(string subId) 
{ 
    string Data = "SUBID=" + subId; 
    string Reponse = String.Empty; 
    StreamWriter Sw = null; 
    StreamReader Sr = null; 
    try 
    { 
     HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://api.vultr.com/v1/server/reboot"); 
     Req.Method = "POST"; 
     Req.ContentType = "application/x-www-form-urlencoded"; 
     Req.ContentLength = Data.Length; 
     Req.Headers.Add(ApiKey); 
     using (var sw = new StreamWriter(Req.GetRequestStream())) 
     { 
      sw.Write(Data); 
     } 
     Sr = new 
     StreamReader(((HttpWebResponse)Req.GetResponse()).GetResponseStream()); 
     Reponse = Sr.ReadToEnd(); 
     Sr.Close(); 
    } 
    catch (Exception ex) 
    { 
     if (Sw != null) 
      Sw.Close(); 
     if (Sr != null) 
      Sr.Close(); 
     Console.WriteLine(ex.Message + " error with vultr..."); 
    } 
} 

エラーは発生しませんが、VMの再起動に失敗します。彼らのサポートに連絡したところ、彼らは再起動コマンドが問題なく動作していると言います。前にこの問題があった人はいますか?ありがとう。

+0

これは実行時にコンソールに何か書き込まれますか? – mjwills

+0

'subId'の** exact **値は何ですか?また、ドキュメンテーションでは、APIキーは必須だと主張していますが、あなたのコードはそれを設定していないようです。 https://www.vultr.com/api/ – mjwills

+0

VMが再起動していないことをどのように確認しますか? VMの状態を確認しましたか?再起動には数分の1秒で完了しない時間がかかるかもしれません。 –

答えて

0

私はそれを理解しました。彼らのAPIからやった他のPOSTリクエストは、Req.ContentLength = Data.Lengthという行が必要です。しかし、何らかの理由で、リブートコマンドを動作させるためにラインを削除しなければならなかった。