2017-06-27 42 views
1

我想使用JSON-RPC來控制名爲aria2的應用程序。當它不需要參數時,我可以控制它。但我嘗試了很多方法,我從來沒有成功用params控制它。如何在C#中使用JSON-RPC 2.0編寫「params」?

一些我試過的代碼是這樣的:

if (secret != null && secret != "") 
    json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = { "token:" + secret, "[http://csharp.org/file.zip]" } }); 
else 
    json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = @"[http://csharp.org/file.zip]" }); 

我也試過:

if (secret != null && secret != "") 
    string json = "{\"jsonrpc\": \"2.0\",\"method\": \"aria2.addUri\",\"params\": {\"token:\"" + secret + "\",\"http://csharp.org/file.zip\"},\"id\": \"m\"}"; 
else 
    string json = "{\"jsonrpc\": \"2.0\",\"method\": \"aria2.addUri\",\"params\": {\"http://csharp.org/file.zip\"},\"id\": \"m\"}"; 

而且我已經嘗試了許多組合和排列與[{'"但沒有任何工程。

這裏是關於aria2的RPC指南的Python: https://aria2.github.io/manual/en/html/aria2c.html#rpc-authorization-secret-token

回答

1

這裏是解決方案可能有些初學者想知道的。

首先,知道你要輸出什麼,在這種情況下是:

{"jsonrpc":"2.0","id":"m","method":"aria2.addUri","params":["token:secret",["http://csharp.org/file.zip"]]} 

結果是在這裏:http://jsoneditoronline.org/?id=4ee8fb1e0314e124bd3ab7d4b2ed19f1


然後,小尖,[]是在params的值之外,所以它們是數組,而不是字符串。它不能使用["params"] = {},它也將不包括字符串數組,例如以下錯誤的代碼:

JsonConvert.SerializeObject(new JObject { ["params"] = "[\"token:secret\", [\"http://csharp.org/file.zip\"]]" }); 

只得到:

{"params":"[\"token:secret\", [\"http://csharp.org/file.zip\"]]"} 

最重要的是令牌的格式,它不是 JProperty()JObject(),它只是一個字符串在params的 JArray()。而且uri也在params的JArray()JArray()。所以 正確的版本是:

JArray param = new JArray { "token:secret", new JArray { "http://csharp.org/file.zip" } }; 
string json = JsonConvert.SerializeObject(new JObject { ["jsonrpc"] = "2.0", ["id"] = "m", ["method"] = "aria2.addUri", ["params"] = param }); 
  • JArray()[]JObject(){}; JArray()JObject()

如果我們不需要JsonConvert(),正確的版本很簡單:

string json = "{ \"jsonrpc\": \"2.0\", \"id\": \"m\", \"method\": \"aria2.addUri\", \"params\": [\"token:secret\", [\"http://csharp.org/file.zip\"]] }"; 
  • 我們不能在這種情況下更改"'
相關問題