2017-03-18 109 views
1

我在PHP寫了這個代碼,以使一個HTTP請求到我的服務器取回我的數據:翻譯PHP HTTP請求到C#.NET

<?php 


$client_secret= ''; 
$data= array(

'email' => '**********', 

'password' => '******', 

'client_id' => '*******' 
); 

$api_url='******'; 

$json_data=json_encode($data); 

$signature_string = md5($json_data . $client_secret); 


$post_data = 'signature='.$signature_string.'&data='.urlencode($json_data); 

$curl = curl_init($api_url); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); 

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($curl, CURLOPT_POST, 1); 

curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); 

$result = curl_exec($curl); 

print_r($result); 


curl_close($curl); 

?> 

而且這工作不錯。數據以JSON格式返回。現在我試圖做同樣的事情,但在.NET中。但我不知道如何將它傳遞給C#與請求本身......所以我決定使用.NET的restsharp庫提這樣的要求:

public void GetResponse() 
     { 
      string client_secret = "*****"; 

      var serializer = new JavaScriptSerializer(); 
      string json_data = serializer.Serialize(new { email = "*****", password = "*****", client_id = "*****" }); 

      var signature_string = CalculateMD5Hash(json_data + client_secret).ToLower(); 

      var postData = "signature=" + signature_string + "&data=" + Server.UrlEncode(json_data); 
      var client = new RestClient("mysite.com"); 
      var request = new RestRequest(Method.POST); 
      request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
      request.AddHeader("cache-control", "no-cache"); 
      request.AddParameter("application/x-www-form-urlencoded", "signature="+signature_string, ParameterType.RequestBody); 
      request.AddParameter("application/x-www-form-urlencoded", "data=" +json_data, ParameterType.RequestBody); 

      IRestResponse response = client.Execute(request); 

     } 

請注意,C#和PHP變量:

$post_data 

and 

var postdata 

是完全相同。現在我只是不知道如何將它們與請求一起傳遞,因爲服務器總是迴應我請求數據是空的。

我在做什麼錯在這裏?

回答

1

嘗試
request.AddBody(YOUR_JSON_STUFF);
request.RequestFormat = DataFormat.Json;

client.execute()