我是JSON&的新手我正在使用VS 2013 / 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)WoT API(www.mywot.com/wiki/API)需要一个带身体的GET请求,& httpWebRequest不允许httpWebRequest.Method中的GET;或(2)序列化字符串未正确序列化。
注意:在下面我必须删除前导“http://”,因为我没有足够的代表来发布超过2个链接。
应该看起来像: api.mywot.com/0.4/public_link_json2?hosts=www.cnn.com/www.cisco.com/www.microsoft.com/&callback=process&key=xxxxxxxxxxxxxx
但看起来像: api.mywot.com/0.4/public_link_json2?{"hosts":"www.cnn.com/www.cisco.com/www.microsoft.com/","callback":"process","key":"xxxxxxxxxxxxxxxxxxx “}。
如果我浏览到:api.mywot.com/0.4/public_link_json2?hosts = www.cnn.com / www.cisco.com / www.microsoft.com /& callback = process& key = xxxxxxxxxxxxxx;我得到了预期的回应。
如果我浏览:api.mywot.com/0.4/public_link_json2?{"hosts":"www.cnn.com/www.cisco.com/www.microsoft.com/","callback":"process ”, “重点”: “xxxxxxxxxxxxxxxxxxx”};我得到403拒绝错误。
如果我硬编码请求&像下面一样发送GET:
var httpWebRequest =(HttpWebRequest)WebRequest.Create(“api.mywot.com/0.4/public_link_json2?+”test“);它也按预期工作。
我很感激任何这方面的帮助&希望我把问题弄清楚了。 THX。
答案 0 :(得分:0)
在我看来问题就是你在URL中发送JSON。根据您引用的API doc,API需要常规的URL编码参数(而不是JSON),并且它会在响应正文中返回 JSON:
请求
API由许多接口组成,所有接口都使用对api.mywot.com的普通HTTP GET请求进行调用,如果成功则返回XML或JSON格式的响应。 HTTP状态代码用于返回错误信息,参数使用标准URL约定传递。请求格式如下:
http://api.mywot.com/version/interface?param1=value1¶m2=value2
您不应该序列化您的请求;你应该反序列化响应。上面的所有测试都证实了这一点。