2016-04-08 3 views
1

Voici ce que j'ai jusqu'à présent et il ne fonctionne pas:Comment télécharger un fichier dans Rackspace à l'aide de RESTSharp et .net 4.0?

private void _send1(string file) 
    { 
     var client = new RestClient("https://identity.api.rackspacecloud.com/v2.0"); 
     var request = new RestRequest("tokens", Method.POST); 
     request.RequestFormat = DataFormat.Json; 

     string test = "{\"auth\":{\"RAX-KSKEY:apiKeyCredentials\"{\"username\":\""; 
     test += UserName; 
     test += "\",\"apiKey\":\""; 
     test += MyToken; 
     test += "\"}}}"; 

     request.AddBody(serText); 
     request.AddParameter("application/json", test, ParameterType.RequestBody); 

     RestResponse response = (RestResponse)client.Execute(request); 

     // Content = "{\"badRequest\":{\"code\":400,\"message\":\"java.lang.String cannot be cast to org.json.simple.JSONObject\"}}" 
    } 

Note: et apiKey sont UserName des informations d'identification valides Rackspace :-)

Merci En avance

Essayez 2: (trouvé ceci sur le web) et ça me donne un jeton ... maintenant qu'est-ce que je fais avec?

private void _send2(string file) 
    { 
     Dictionary<string, object> dictAuth = new Dictionary<string, object>(); 
     dictAuth.Add("RAX-KSKEY:apiKeyCredentials", new { username = UserName, apiKey = MyToken }); 
     var auth = new 
     { 
      auth = dictAuth 
     }; 

     RestClient client = new RestClient("https://identity.api.rackspacecloud.com"); 
     RestSharp.RestRequest r = new RestRequest("/v2.0/tokens", Method.POST); 
     r.AddHeader("Content-Type", "application/json"); 
     r.RequestFormat = DataFormat.Json; 
     r.AddBody(auth); 


     RestResponse response = (RestResponse)client.Execute(r); 
     // Content = "{\"access\":{\"token\":{\"id\":\"AACCvxjTOXA\",\"expires\":\"2016-04-09T21:12:10.316Z\",\"tenant\":{\"id\":\"572045\",\"name\... 
    } 

déplacer un peu plus loin: je créer une classe qui parse l'URL, TenantID et le jeton de l'étape 2 ci-dessus Ces données sont transmises à l'appel PostFile:

private void PostFile(string url, string tenantID, string token, string file) 
    { 
     string fName = Path.GetFileName(file); 

     RestClient client = new RestClient(url); 
     string baseURL = string.Format("v1/{0}/Support/{1}", tenantID, fName); 

     RestRequest r = new RestRequest(baseURL, Method.POST); 
     r.AddHeader("Content-Type", "text/plain"); 
     r.AddParameter("X-Auth-Token", token); 

     r.AddFile(fName, file); 

     RestResponse response = (RestResponse)client.Execute(r); 

     if(response.StatusCode == System.Net.HttpStatusCode.OK) 
     { 
      int x = 0; 
     } 

    } 

ici est ce qui a finalement travaillé:

 bool bRetval = false; 
     string fName = Path.GetFileName(file); 

     RestClient client = new RestClient(url); 
     string baseURL = string.Format("/Support/{0}", fName); 

     RestRequest r = new RestRequest(baseURL, Method.PUT); 
     r.AddHeader("Content-Type", "text/plain"); 
     r.AddHeader("X-Auth-Token", token); 

     r.AddFile(fName, file); 

     RestResponse response = (RestResponse)client.Execute(r); 

Répondre

1

Voir le poste ci-dessus pour les fonctions de soutien qui mènent à celui-ci

private bool PostFile(string url, string token, string file) 
    { 
     bool bRetval = false; 
     string fName = Path.GetFileName(file); 

     RestClient client = new RestClient(url); 
     string baseURL = string.Format("/Support/{0}", fName); 

     RestRequest r = new RestRequest(baseURL, Method.PUT); 
     r.AddHeader("Content-Type", "text/plain"); 
     r.AddHeader("X-Auth-Token", token); 

     r.AddFile(fName, file); 

     RestResponse response = (RestResponse)client.Execute(r); 

     if (response.StatusCode == System.Net.HttpStatusCode.Created) 
     { 
      bRetval = true; 
     } 

     return bRetval; 
    }