C# Can';t访问信任网(WoT)API w/JSON.Net

C# Can';t访问信任网(WoT)API w/JSON.Net,c#,json,json.net,C#,Json,Json.net,我是JSON新手&我正在使用VS2013/C。这是请求和响应的代码。很简单,不是吗 Request request = new Request(); //request.hosts = ListOfURLs(); request.hosts = "www.cnn.com/www.cisco.com/www.microsoft.com/"; request.callback = "process"; request.key = "xx

我是JSON新手&我正在使用VS2013/C。这是请求和响应的代码。很简单,不是吗

Request request = new Request();
        //request.hosts = ListOfURLs();
        request.hosts = "www.cnn.com/www.cisco.com/www.microsoft.com/";
        request.callback = "process";
        request.key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

        string output = JsonConvert.SerializeObject(request);
      //string test = "hosts=www.cnn.com/www.cisco.com/www.microsoft.com/&callback=process&key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        try
        {

            var httpWebRequest = (HttpWebRequest)     WebRequest.Create("http://api.mywot.com/0.4/public_link_json2?);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
           {
                string json = output;

                streamWriter.Write(json);
           }
            var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var responseText = streamReader.ReadToEnd();
            }
        }
        catch (WebException e)
        {
            MessageBox.Show(e.ToString());
        }
        //response = true.
        //no response = false
        return true;
    }
当我运行这个程序时,我得到一个405错误,指示不允许使用这个方法

在我看来,这里至少有两个可能的问题:(1)WOTAPI(www.mywot.com/wiki/API)需要一个带有主体的GET请求,&httpWebRequest不允许在httpWebRequest.Method中使用GET;或者(2)序列化的字符串未正确序列化

注意:在下面的文章中,我不得不删除前面的“http://”,因为我没有足够的代表发布超过2个链接

它应该是这样的: api.mywot.com/0.4/public\u link\u json2?hosts=www.cnn.com/www.cisco.com/www.microsoft.com/&callback=process&key=xxxxxxxxxxxxx

但实际上看起来: api.mywot.com/0.4/public_link_json2?{“主机”:“www.cnn.com/www.cisco.com/www.microsoft.com/”,“回调”:“进程”,“密钥”:“xxxxxxxxxxxxxxxxxxxx”}

如果我浏览到:api.mywot.com/0.4/public\u link\u json2?hosts=www.cnn.com/www.cisco.com/www.microsoft.com/&callback=process&key=xxxxxxxxxxxxx;我得到了预期的回应

如果我浏览到:api.mywot.com/0.4/public_link_json2?{“hosts”:“www.cnn.com/www.cisco.com/www.microsoft.com/”,“callback”:“process”,“key”:“xxxxxxxxxxxxxxxx”};我得到一个403拒绝错误

如果我将请求硬编码并作为GET发送,如下所示:

var httpWebRequest=(httpWebRequest)WebRequest.Create(“api.mywot.com/0.4/public_link_json2?+“test”);它也可以按预期工作


我非常感谢您提供的任何帮助,希望我已经澄清了问题。Thx。

在我看来,问题在于您正在URL中发送JSON。根据您引用的示例,API需要常规URL编码参数(而不是JSON),它将在响应体中向您返回JSON:

请求

API由多个接口组成,所有接口都使用对API.mywot.com的正常HTTP GET请求进行调用,如果成功,则返回XML或JSON格式的响应。HTTP状态码用于返回错误信息,参数使用标准URL约定传递。请求格式如下:

您不应该序列化您的请求;您应该反序列化响应。上面的所有测试都证明了这一点