2017-06-27 3 views
1

Ich möchte JSON-RPC verwenden, um eine Anwendung namens Aria2 zu steuern. Ich kann es kontrollieren, wenn es keine Parameter benötigt. Aber ich habe viele Möglichkeiten ausprobiert, ich habe es nie erfolgreich mit Params kontrolliert.Wie schreibe ich "Params" in JSON-RPC 2.0 in C#?

Einige der Code, den ich versucht habe, ist wie folgt:

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]" }); 

Ich habe auch versucht:

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\"}"; 

Und ich habe viele Kombinationen und Permutationen mit [{'" aber nichts funktioniert versucht.

Hier ist die RPC-Führung über aria2 für Python: https://aria2.github.io/manual/en/html/aria2c.html#rpc-authorization-secret-token

Antwort

1

Hier ist die Lösung können einige Anfänger wissen wollen.

Erstens wissen, was Sie ausgeben möchten, in diesem Fall:

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

Ergebnis ist hier: http://jsoneditoronline.org/?id=4ee8fb1e0314e124bd3ab7d4b2ed19f1


Und dann die kleine Spitze, [] ist außerhalb des Werts der Parameter, also Arrays, keine Zeichenfolge. Es kann nicht ["params"] = {} verwendet, wird es auch nicht String Array deckt zum Beispiel folgenden falschen Code:

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

nur erhalten:

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

Das wichtigste ist, das Format von Token, es ist kein JProperty() in JObject(), es ist nur eine Zeichenfolge in von Params. Und uri ist auch in JArray() 's JArray() von params. So die richtige Version ist:

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()[] ist, JObject() ist {}; JArray()JObject().

Wenn wir nicht JsonConvert() brauchen, ist die richtige Version einfach:

string json = "{ \"jsonrpc\": \"2.0\", \"id\": \"m\", \"method\": \"aria2.addUri\", \"params\": [\"token:secret\", [\"http://csharp.org/file.zip\"]] }"; 
  • Wir nicht " zu ' in diesem Fall ändern können.
Verwandte Themen