繁体   English   中英

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

[英]Pass associative array to PHP API from C#

我正在从c#调用PHP API 但是,当我必须将关联数组传递给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吗?

也许添加对在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旨在解决这类问题。

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

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

如果我猜对了, RestSharpAddParameter方法不会自动将对象序列化为json,因此只是调用对象的toString方法。 所以尝试获取一个JSON.net库并手动制作json编码,

IDictionary<string,string> dicRequeset = new Dictionary<string, string>
                {
                    {"request-id", "1234"},
                    {"hardware-id", "CCCCXXX"},
                };
var jsonstr = JsonConvert.SerializeObject(dicRequeset);
request.AddParameter("request", jsonstr);

这应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM