这让我有点疯狂。我正在尝试做一些非常简单的事情,而且之前我做过很多次。只是尝试调用REST API。
我正在尝试使用endpoint =“http://feed.linksynergy.com/productsearch?token=717f8c8511725ea26fd5c3651f32ab187d8db9f4b208be781c292585400e682d&keyword=DVD”调用GetMessage,并且它会一直返回空字符串。如果我将任何其他有效的URL传递给它,它将起作用。但是,如果我只是将原始URL复制并粘贴到Web浏览器中,它就会返回正常!
任何聪明的开发者都可以告诉我发生了什么吗?
以下代码。提前谢谢。
詹姆斯
public string GetMessage(string endPoint) { HttpWebRequest request = CreateWebRequest(endPoint);
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// grab the response
using (var responseStream = response.GetResponseStream())
{
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
}
}
private HttpWebRequest CreateWebRequest(string endPoint) { var request =(HttpWebRequest)WebRequest.Create(endPoint);
request.Method = "GET";
request.ContentLength = 0;
request.ContentType = "text/xml";
return request;
}
答案 0 :(得分:0)
不确定为什么设置 ContentLength / ContentType - 通常用于 HTTP POST ,其中有一个请求正文,您可以为其编写数据通过流。
这是 HTTP GET ,因此没有请求正文。 (只是URI w /查询字符串)
这应该有效:
using System;
using System.IO;
using System.Net;
using System.Text;
// Create the web request
HttpWebRequest request = WebRequest.Create("http://www.someapi.com/") as HttpWebRequest;
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
Console.WriteLine(reader.ReadToEnd());
}
修改强>
@Gabe也是对的 - 在另一台计算机上试试这个,这不是任何类型的防火墙/代理服务器。
我的工作PC是代理服务器的后面,所以为了进行基于REST的HTTP调用,我需要这样做:
var proxyObject = new System.Net.WebProxy("http://myDomain:8080/", true);
System.Net.WebRequest req = System.Net.WebRequest.Create("http://www.someapi.com/");
req.Proxy = proxyObject;
proxyObject.Credentials = New System.Net.NetworkCredential("domain\username","password")