Wie rufe ich die JSON-RPC-API mit C# auf?

Wie greife ich in C# so auf die JSON RPC API zu, dass ich auch die Fehler auslesen kann, die die Schnittstelle liefert?

Antworten (2)

Ich verwende die Newtonsoft.Json.LinqBibliothek wie unten gezeigt, um die Daten zu erhalten. Bald werde ich unter http://www.coinapi.net Strongly Typed C# Client Libraries posten

Der Haupttrick zum Abrufen des JSON-Fehlercodes besteht darin, GetWebResponse() erneut in der catch-Methode aufzurufen. Kehren Sie dann zurück und analysieren Sie die Daten. Ich habe darüber diskutiert, die WebException selbst in den Rückgabecode aufzunehmen, aber das erfordert möglicherweise zu viele Änderungen. Wenn jemand Ideen hat, nehme ich sie gerne auf.

        var ret = InvokeMethod("getblockhash", index);

Hier ist die Definition von InvokeMethod

    public JObject InvokeMethod(string a_sMethod, params object[] a_params)
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Url);
        webRequest.Credentials = Credentials;

        webRequest.ContentType = "application/json-rpc";
        webRequest.Method = "POST";

        JObject joe = new JObject();
        joe["jsonrpc"] = "1.0";
        joe["id"] = "1";
        joe["method"] = a_sMethod;

        if (a_params != null)
        {
            if (a_params.Length > 0)
            {
                JArray props = new JArray();
                foreach (var p in a_params)
                {
                    props.Add(p);
                }
                joe.Add(new JProperty("params", props));
            }
        }

        string s = JsonConvert.SerializeObject(joe);
        // serialize json for the request
        byte[] byteArray = Encoding.UTF8.GetBytes(s);
        webRequest.ContentLength = byteArray.Length;

        try
        {
            using (Stream dataStream = webRequest.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);
            }
        }
        catch (WebException we)
        {
            //inner exception is socket
            //{"A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 23.23.246.5:8332"}
            throw;
        }
        WebResponse webResponse = null;
        try
        {
            using (webResponse = webRequest.GetResponse())
            {
                using (Stream str = webResponse.GetResponseStream())
                {
                    using (StreamReader sr = new StreamReader(str))
                    {
                        return JsonConvert.DeserializeObject<JObject>(sr.ReadToEnd());
                    }
                }
            }
        }
        catch (WebException webex)
        {

            using (Stream str = webex.Response.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(str))
                {
                    var tempRet =  JsonConvert.DeserializeObject<JObject>(sr.ReadToEnd());
                    return tempRet;
                }
            }

        } 
        catch (Exception)
        {

            throw;
        }
    }

Vielleicht möchten Sie sich auch diese C#-Bitcoin-Bibliothek ansehen: https://github.com/GeorgeKimionis/BitcoinLib