调用API

时间:2015-09-25 04:31:42

标签: c# php json

我已经看了几个关于SO的相关示例,并尝试了许多方法来实现这一点,但是我对每次尝试都变得更加困惑。

我正在尝试搜索Wordpress.org插件存储库API并从搜索结果中获取插件列表。

端点是:http://api.wordpress.org/plugins/info/1.0/

要传递的两个重要数据位是“动作”和“搜索”。我现在感兴趣的操作是“query_plugins”,并在请求中传递搜索字符串。

这是PHP的等价物:

$payload = array(
  'action' => 'query_plugins',
  'request' => serialize(
    (object)array(
        'search ' => 'search-phrase',
    )
  )
);
$body = wp_remote_post( 'http://api.wordpress.org/plugins/info/1.0/', array( 'body' => $payload) );

我能找到的唯一真实文档来自此博文(我在上面的示例代码中):https://dd32.id.au/projects/wordpressorg-plugin-information-api-docs/

我正在使用RestSharp构建请求,代码如下:

var client = new RestClient("http://api.wordpress.org/");
var request = new RestRequest("plugins/info/1.0", Method.POST);

request.AddParameter("XXX", "XXX");

var response = client.Execute(request);
var content = response.Content;

“request.AddParameter(”XXX“,”XXX“);上面是我卡住的地方。我需要在C#中构建等效的PHP数组(并正确序列化?)以便API接受请求。我尝试了几种变体和组合,从原始的一切:

request.AddParameter("action", "query_plugins");
request.AddParameter("search", "keyword");
// and variants such as request.AddParameter("request", "[{ search: keyword }]);

我知道这不会起作用(但无论如何都要刺),使用带有动作和搜索参数的Dictionary(),并尝试以多种方式序列化它(最近涉及JsonConvert.SerializeObject)。

此时我不知道应该叫哪棵树,我有一种感觉我甚至不在附近。我甚至不确定我是否应该序列化为JSON,XML或只是一个字节流(据我所知,这是PHP serialize()方法的作用,如果我没有弄错的话),我不确定打包我需要在请求中发送的所有数据的最佳方法。

1 个答案:

答案 0 :(得分:0)

这似乎有效。而不是POST,使用GET

请在此处查看工作示例.. https://dotnetfiddle.net/rvL9eC

var client = new RestClient("http://api.wordpress.org/");
var request = new RestRequest("plugins/info/1.0", Method.GET);

request.AddParameter("action", "query_plugins");
request.AddParameter("search", "oauth");

var response = client.Execute(request);
var content = response.Content;