我在Visual Studio 2012移动版中使用它时在GetResponse()方法中遇到错误,但它在Visual Studio桌面版中工作正常,请帮助,
守则如图所示
var myurl = "https://api.forecast.io/forecast/4b1ac2aa66db99adcf90578132b507d4/";
string url = myurl + lat + "," + lon;
var request = HttpWebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = request.GetResponse () as HttpWebResponse) {
if (response.StatusCode != HttpStatusCode.OK) {
//Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode);
}
using (StreamReader reader = new StreamReader (response.GetResponseStream ())) {
string content = reader.ReadToEnd ();
Console.WriteLine (reader.ReadToEnd ());
if (string.IsNullOrWhiteSpace (content)) {
//Console.Out.WriteLine("Response contained empty body...");
} else {
myopt = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject> (content);
System.DateTime dtDateTime = new DateTime (1970, 1, 1, 0, 0, 0, 0);
double unixTimeStamp = 1392316200;
dtDateTime = dtDateTime.AddSeconds (myopt.hourly.data [23].time).ToLocalTime ();
myopt是各种Json类的rootobject类的对象。 请帮助我,因为我对这个领域很陌生,谢谢
答案 0 :(得分:0)
在Windows Phone中,所有Http请求都是异步完成的。因此,您无法呼叫GetReponse()
,因为它正在阻止。相反,您应该使用异步调用BeginGetResponse
并向其传递一个回调函数,该函数将在收到响应时被调用。
以下是您如何异步执行简单的HttpWebRequest:
string myUrl = "http://example.com"
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(myUrl);
request.BeginGetResponse(myCallback, request);
然后像这样定义回调:
void myCallback(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
if (request != null)
{
try
{
HttpWebResponse response = request.EndGetResponse(result);
//You can check the response code this way
if (reponse.StatusCode == HttpStatusCode.OK) {
//Do stuff with your response
}
}
catch (WebException e)
{
//Handle exception
}
}
}
由于这是一个异步调用,因此在一个新线程中调用回调方法,该新线程与您创建请求的线程不同。因此,请务必考虑到这一点,以避免无效的跨线程访问。
有关详细信息,请参阅to here。