C#WebRequest不适用于LinkShare的此链接

时间:2010-11-13 02:25:22

标签: c# rest service

这让我有点疯狂。我正在尝试做一些非常简单的事情,而且之前我做过很多次。只是尝试调用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;
  }

1 个答案:

答案 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")