0

我有以下 CURL 正在尝试转换为 C#。我没有任何 CURL 经验。

$ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL            => 'https://api.lanoba.com/authenticate',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => array(
            'token'      => $_POST['token'],
            'api_secret' => 'YOUR-API-SECRET'
        )
    ));

到目前为止,我想出了这个:

//Object to create a JSON object
public class LanobaJSONObject
{
    public string token { get; set; }
    public string api_secret { get; set; }
}

public void DoAuthenticationCheck()
{


    var token = Request["token"].ToString();

        var jsonObject = new LanobaJSONObject()
        {
            token = token,
            api_secret = "YOUR-API-SECRET"
        };

        var jsonVal = Json(jsonObject, JsonRequestBehavior.AllowGet);

        Uri address = new Uri("https://api.lanoba.com/authenticate");
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
        ServicePointManager.ServerCertificateValidationCallback = delegate
        {
            return
                true; //always trust the presented cerificate
        };
        request.Method = "post";
        request.ContentType = "text/json";
        string response = null;
        using (var streamWriter = new StreamWriter(request.GetRequestStream()))
        {
            streamWriter.Write(jsonVal);
        }

        using (HttpWebResponse resp = request.GetResponse() as HttpWebResponse)
        {
            var reader = new StreamReader(resp.GetResponseStream());
            response = reader.ReadToEnd();
        }
//I keep getting an error code back from the provider with no real error description
//so right now I am assuming that I am doing something wrong on my end

}

任何帮助,将不胜感激。

编辑:最终答案:

在 Onkelborg 的帮助下(谢谢!),这里是一个工作示例:

   var wc = new WebClient();
    var wcResponse = wc.UploadValues("https://api.lanoba.com/authenticate", new System.Collections.Specialized.NameValueCollection() { { "token", Request["token"].ToString()}, { "api_secret", "Your-Secret-Api--" } });
    var decodedResponse = wc.Encoding.GetString(wcResponse);

再次感谢您。

4

1 回答 1

1

据我所知,您根本不应该发送 JSON .. :)

在 WebClient 类上使用 UploadStrings/UploadValues(不记得实际名称.. :) ),这几乎正是您想要的 - 它会将 namevaluecollection 发布到给定的 uri 并返回带有答案的字符串 :)

于 2012-07-11T23:07:33.967 回答