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}