2013-05-02 58 views
1

我在網上發現了一些使用Mashape API獲取QR碼的優秀代碼。 Here在.NET中使用Mashape API的問題

他們的代碼的偉大工程,但如果我嘗試將其更改爲使用其他Mashape,我得到一個

"An exceptions occured during the operation, making the result invalid"

錯誤。還有一些關於檢查內部異常的內容。

下面的代碼顯示了來自鏈接的QR碼,我試圖使用Weather API和Spotify API。

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    WebClient client = new WebClient(); 
    client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted); 
    client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
    client.Headers["X-Mashape-Authorization"] = "mashape-api-code-goes-here"; 

    StringBuilder postData = new StringBuilder(); 
    // For Spotify (this doesn't work) 
    // postData.AppendFormat("{0}={1}", "q", HttpUtility.UrlEncode(txtArtitst.Text)); 
    // var uri = new Uri("https://mager-spotify-web.p.mashape.com/search/1/artist.json?", UriKind.Absolute); 

    // For Weather info (this doesn't work) 
    postData.AppendFormat("{0}={1}", "_method", HttpUtility.UrlEncode("getForecasts")); 
    postData.AppendFormat("&{0}={1}", "location", HttpUtility.UrlEncode("brisbane")); 
    var uri = new Uri("https://george-vustrey-weather.p.mashape.com/api.php?", UriKind.Absolute); 

    // For QR Code (this works) 
    //postData.AppendFormat("{0}={1}", "content", HttpUtility.UrlEncode("TestQRCode")); 
    //postData.AppendFormat("&{0}={1}", "quality", HttpUtility.UrlEncode("L")); 
    //postData.AppendFormat("&{0}={1}", "type", HttpUtility.UrlEncode("text")); 
    //postData.AppendFormat("&{0}={1}", "size", HttpUtility.UrlEncode("5")); 
    //var uri = new Uri("https://mutationevent-qr-code-generator.p.mashape.com/generate.php?", UriKind.Absolute); 

    client.UploadStringAsync(uri, "POST", postData.ToString()); 
    txtResult.Text = postData.ToString(); 

    progress1.IsIndeterminate = true; 
    button1.IsEnabled = false; 
} 


void client_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
{ 
    progress1.IsIndeterminate = false; 

    var client = sender as WebClient; 
    client.UploadStringCompleted -= client_UploadStringCompleted; 
    string response = string.Empty; 
    if (!e.Cancelled) 
    { 
     try 
     { 
      response = HttpUtility.UrlDecode(e.Result); // seems to error out here - result invalid 
      txtResult.Text = response; 
     } 
     catch (Exception ex) 
     { 
      txtResult.Text = "ERROR : " + ex.Message; 
     } 
    } 

    button1.IsEnabled = true; 
} 

內部異常說:

的InnerException

{System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. 
    at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClasse.<EndGetResponse>b__d(Object sendState) 
    at System.Net.Browser.AsyncHelper.<>c__DisplayClass1.<BeginOnUI>b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) 
    at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)} System.Exception {System.Net.WebException} 
+0

什麼是內部異常說呢? – 2013-05-02 22:52:41

+0

增加了內部異常 – 2013-05-02 22:55:48

+0

這看起來很可疑: client.Headers [「X-Mashape-Authorization」] =「mashape-api-code-goes-here」; – 2013-05-02 22:58:59

回答

0

你嘗試一個GET而不是POST?

此外,您還可以嘗試應用/ JSON,而不是應用程序/ x-WWW窗體-urlencoded在Windows 8在這裏

工作示例 - https://github.com/ismaelc/Mashape_Windows8_Sample/blob/master/App5/App5/MainPage.xaml.cs

+0

對於這兩項更改,我仍然收到「TargetInvocationException」錯誤。我會看看你的例子,並重新編碼我的匹配,看看我如何去。 – 2013-05-02 23:12:20

+0

這是另一個回購 - https://github.com/ismaelc/MashapeFBSentimentExample您可以忽略不再使用的consumerkey和consumersecret密鑰 – 2013-05-02 23:25:31