2016-04-08 20 views
1

Hier ist, was ich bisher haben und es funktioniert nicht:Wie kann ich eine Datei mit RESTSharp und .net 4.0 in Rackspace hochladen?

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\"}}" 
    } 

Anmerkung: Username und apikey gelten Rackspace Credentials :-)

Dank Im Vorfeld

Versuchen 2: (gefunden dies im Web) und es gibt mir ein Token ... was mache ich jetzt damit?

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\... 
    } 

nur ein bisschen bewegt weiter: schaffe ich habe eine Klasse, die die URL, tenantID analysiert und aus dem obigen Schritt 2 Token Diese Daten können auf den Anruf PostFile geben: Hier

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; 
     } 

    } 

schließlich bearbeitet wird, was:

 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); 

Antwort

1

den obigen Beitrag Siehe für die unterstützenden Funktionen, die zu diesem hinführen

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; 
    }