1

I found some great code on the net for using the Mashape API to get a QR code. Here.

Their code works great, but if I try and change it to use another Mashape, I get a

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

error. And something about checking the inner exception.

Code below shows QR code from link and my goes at trying to use a Weather API and the 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;
}

The inner exception says :

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

1 回答 1

0

您是否尝试过 GET 而不是 POST?

另外,您可以尝试 application/json 而不是 application/x-www-form-urlencoded

这里是 Windows 8 上的一个工作示例 - https://github.com/ismaelc/Mashape_Windows8_Sample/blob/master/App5/App5/MainPage.xaml.cs

于 2013-05-02T23:06:38.507 回答