.net 4.0 如何使用RESTSharp和.net 4.0将文件上载到rackspace?

.net 4.0 如何使用RESTSharp和.net 4.0将文件上载到rackspace?,.net-4.0,restsharp,rackspace,.net 4.0,Restsharp,Rackspace,以下是迄今为止我所拥有的,但它不起作用: 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 = DataFor

以下是迄今为止我所拥有的,但它不起作用:

    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\"}}"
    }
注意:用户名和apiKey是有效的机架空间凭据:-)

谢谢 提前

试试2:(在网上找到的)它给了我一个令牌。。。现在我该怎么处理它呢

    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\...
    }
以下是最终奏效的方法:

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

参见上面的文章,了解导致这一点的支持功能

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