2010-11-13 16 views
0

這使我有點瘋狂。我試圖做一些很簡單的事情,而且我之前做過很多次。只是試圖調用一個REST API。C#WebRequest將無法使用LinkShare的此鏈接

我試圖調用的GetMessage與端點=「http://feed.linksynergy.com/productsearch?token=717f8c8511725ea26fd5c3651f32ab187d8db9f4b208be781c292585400e682d &關鍵字= DVD」,它不斷地返回空字符串。如果我通過任何其他有效的URL,它將起作用。但是,如果我只是複製並粘貼到網頁瀏覽器的原始URL,它會返回正常!

任何智能開發人員能告訴我發生了什麼事嗎?

下面的代碼。提前致謝。

詹姆斯

公共字符串的GetMessage(串端點) { HttpWebRequest的請求= CreateWebRequest(端點);

 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; 
     } 
    } 

私人HttpWebRequest的CreateWebRequest(串端點) { VAR請求=(HttpWebRequest的)WebRequest.Create(端點);

 request.Method = "GET"; 
     request.ContentLength = 0; 
     request.ContentType = "text/xml"; 

     return request; 
    } 
+0

不幸的是,你的代碼爲我工作。取回30278個字符的XML文檔;不知道你的結局會發生什麼。 – 2010-11-13 02:33:07

+0

賠率是你遇到某種緩存/代理問題。它可以在任何可以訪問的其他機器上使用嗎? – Gabe 2010-11-13 02:49:57

回答

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也很正確 - 試試這個另一臺計算機上,是不是任何背後一種防火牆/代理服務器。

我的工作電腦是代理服務器的後面,所以爲了使基於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") 
+0

感謝您的評論傢伙。 @ RPM1984,當我刪除設置的ContentLength/ContentType語句時,它沒有什麼區別。 – 2010-11-13 07:18:35

+0

@加貝,我的電腦不在任何防火牆或代理之後。另外,如果我將URL指向其他任何內容,它都可以工作。它似乎只是不會與該網址一起工作。更奇怪的是,如果我使用Web瀏覽器指向該URL,則保存XML並將其放在cassini上,將cassini的URL重命名爲相同的文件,這將起作用!這讓我瘋狂! – 2010-11-13 07:20:10

+0

神祕繼續...如果我故意讓網址中的令牌無效,那麼我可以閱讀迴應!否則,我只是在我調用reader.ReadToEnd()時得到一個空字符串; – 2010-11-13 19:00:12