C# Can';t访问信任网(WoT)API w/JSON.Net
我是JSON新手&我正在使用VS2013/C。这是请求和响应的代码。很简单,不是吗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
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约定传递。请求格式如下:
您不应该序列化您的请求;您应该反序列化响应。上面的所有测试都证明了这一点