我已经看了几个关于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()方法的作用,如果我没有弄错的话),我不确定打包我需要在请求中发送的所有数据的最佳方法。
答案 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;