我正在为Windows Phone构建一个应用程序,它向服务器发出请求并检索一些JSON文本并将信息显示给用户。
我允许用户手动输入搜索字符串,或让他们使用ZXing.NET库从QR码扫描它。
我需要XAML页面,一个用于文本输入,另一个用于扫描QR码。一旦我有了搜索字符串,我就会导航到我的显示页面,在那里我尝试从网站上读取信息。从文本条目XAML页面它工作得很好,从QR码XAML页面我得到了类型例外的第一次机会例外。
以下是我从文本条目中调用显示页面的方法:
this.Frame.Navigate(typeof(PartDisplayPage), cleanedString);
在二维码页面上,我实际上已经注释掉了二维码阅读器,只需将它放在一个AppBar按钮中:
this.Frame.Navigate(typeof(PartDisplayPage), "144-2227");
在PartDisplayPage
OnNavigatedTo
函数中,我有以下内容
this.navigationHelper.OnNavigatedTo(e);
pInfo = new PartInfoJSON(e.Parameter as string);
await progressbar.ShowAsync();
await pInfo.getPartInfo();
await progressbar.HideAsync();
程序进入pInfo.getPartInfo()函数,看起来像这个
//create url
string serviceURL = ...;
try
{
var resp = await MakeAsyncRequest(serviceUrl, "");
ProductInfo t = JsonConvert.DeserializeObject<ProductInfo>(resp);
}
catch(Exception e)
{
//set stuff to Default value strings for checking later
}
我认为我在StackOverFlow上找到的MakeAsync请求看起来像这样
public static Task<string> MakeAsyncRequest(string url, string contentType)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//request.ContentType = contentType;
request.Method = "GET";
Task<WebResponse> task = Task.Factory.FromAsync(
request.BeginGetResponse,
asyncResult => request.EndGetResponse(asyncResult),
(object)null);
return task.ContinueWith(t => ReadStreamFromResponse(t.Result));
}
ReadFromStreamResponse:
private static string ReadStreamFromResponse(WebResponse response)
{
using (Stream responseStream = response.GetResponseStream())
using (StreamReader sr = new StreamReader(responseStream))
{
//Need to return this response
string strContent = sr.ReadToEnd();
return strContent;
}
}
所以我不知道造成这个问题的原因。如果我使用搜索页面并键入144-2227它可以正常工作,如果我将测试硬编码到ScanPage中它会抛出一个异常,它不会被我的try catch块捕获。如果有人有任何见解,我会感激不尽。