2017-08-13 35 views
0

私はどのように私はfilesというパラメータを作成し、RestSharpを使用して、それに複数のファイルを追加することができ、このAPIにhttps://support.crowdin.com/api/add-file/restsharpで複数のファイルをアップロードするには?

をファイルをアップロードしたいですか?

私はこれまでこのコードを書いていますが、動作しません。RestSharpは意図したとおりにファイルをアップロードしていないようです。

 var addUrl = new Uri($"https://api.crowdin.com/api/project/{projectIdentifier}/add-file?key={projectKey}&json="); 


     var restClient = new RestSharp.RestClient("https://api.crowdin.com"); 
     var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); 
     request.AlwaysMultipartFormData = true; 

     request.AddQueryParameter("key", projectKey); 
     request.AddQueryParameter("json", ""); 

     var files = new Dictionary<string, byte[]> 
     { 
      { "testfile", File.ReadAllBytes(fileName) } 
     }; 
     request.AddParameter("files", files, RestSharp.ParameterType.RequestBody); 

     var restResponse = restClient.Execute(request); 

これは私

{ 
    "success":false, 
    "error":{ 
    "code":4, 
    "message":"No files specified in request" 
    } 
} 
+0

@SirRufoあなたがリンクしている質問は、1つのファイルを追加することです。この質問はファイルの配列を追加することですが、これは簡単ではありません。 – riki

+0

2つのファイルを追加するサンプルがある回答(6アップノート)があります。 –

+0

答えは2つのファイルをリクエストに直接追加していますが、私の場合はもっと複雑です。私は "ファイル"という名前の "配列"に複数のファイルを追加する必要があります。 (だから私は配列名を制御する必要があります)。 – riki

答えて

2

を与える@SirRufoはコメントで解決策を述べたが、soltionとしてそれを投稿していなかったので、私はここでそれを説明します。

http POSTメソッドには実際に配列の概念がありません。 代わりにフィールド名に角括弧を付けることは、単なる慣例に過ぎません。

この例のコードは動作します:

 var restClient = new RestSharp.RestClient("https://api.crowdin.com"); 
     var request = new RestSharp.RestRequest($"api/project/{projectIdentifier}/add-file", RestSharp.Method.POST); 
     request.AlwaysMultipartFormData = true; 
     request.AddHeader("Content-Type", "multipart/form-data"); 

     request.AddQueryParameter("key", projectKey); 
     request.AddQueryParameter("json", ""); 

     request.AddFile("files[testfile1.pot]", fileName); 
     request.AddFile("files[testfile2.pot]", fileName); 

     // Just Execute(...) is missing ... 

ネストカスタムパラメータまたはそのような複雑なものへの必要はありません。 この「特別な」名前形式のファイルを追加するだけです。

私の間違いは、files[filenamehere.txt]の部分が実際に必要だったより複雑なPOST本体を暗示していると思っていました。

関連する問題