从C#传递关联数组到PHP API

时间:2014-01-06 08:25:58

标签: c# php api restsharp

我正致力于从PHP API致电c#。但是,当我必须将关联数组传递给API时,我的问题出现了。我不知道C#中PHP关联数组的确切实现,但我使用了字典。它不起作用。

我一直在使用RestSharp来调用API。

代码实施:

  var client = new RestClient(BaseUrl);
  var request = new RestRequest(ResourceUrl, Method.POST);
  IDictionary<string,string> dicRequeset = new Dictionary<string, string>
                {
                    {"request-id", "1234"},
                    {"hardware-id", "CCCCXXX"},
                };
  request.AddParameter("request", dicRequeset);
  var response = client.Execute(request);
  var content = response.Content;

PHP API实施(简称):

 * Expected input:
 *   string request[request-id,hardware-id]
 * Return:
 *   code = 0 for success
 *   string activation_code
 */
function activate()
    {
        $license = $this->checkFetchLicense();
        if (!$license instanceof License) return;

        $response = $license->activate((array)$this->_request->getParam('request'));
    }

有人可以帮我从C#传递数组到PHP API吗?

3 个答案:

答案 0 :(得分:1)

也许添加对在C#和PHP中的约定有所不同?您是否尝试过使用Add

IDictionary<string,string> dicRequeset = new Dictionary<string, string>();
dicRequeset.Add("request-id", "1234"); 
dicRequeset.Add("hardware-id", "CCCCXXX");

或使用索引器?

dicRequeset["request-id"] = "1234";
dicRequeset["hardware-id"] = "CCCXXX";

或者我能想到的最好的是JSON,因为它是为传输目的而设计的。

var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(new {request-id = "1234", hardware-id = "CCCXXX"});

尽管我将其标记为最佳,但第三种变体中的问题可能是PHP API可能无法解码JSON字符串,因为它可能不是那样设计的。但是通用JSON旨在解决这类问题。

答案 1 :(得分:1)

虽然很晚,但我通过以下方法解决了这个问题:

        var request = new RestRequest(ResourceUrl, Method.POST);
        request.AddParameter("request[request-id]", hardwareId);
        request.AddParameter("request[hardware-id]", hardwareId);

答案 2 :(得分:0)

如果我猜对了,AddParameter的{​​{1}}方法不会自动将对象序列化为json,而只是调用对象的RestSharp方法。 因此,尝试获取JSON.net库并手动生成json编码,

toString

这应该有效。