我有一个WP7应用程序,我试图重建一个HTTPWebRequest,我已经使用同步方法在其他地方成功写入(粘贴结束),但在WP7中无法正常工作,我假设因为我对这些方法的异步版本做了错误的处理。HttpWebRequest失败,找不到为什么
我认为这个问题源于Compact Framework上的非工作代码只能发送bytearray []的事实 - 我没有发送json字符串的选项。如果我在可以工作的代码中发送一个bytearray,那么我也会遇到一个错误。有不同的选择吗?
这是我的代码 - 这是行不通的。该异常被抛出的最后一个方法的第2行 - “使用(VAR respons ...)”:
public void CreateUser()
{
var request = (HttpWebRequest)WebRequest.Create("http://staging.cloudapp.net:8080/api/users/");
request.Method = "POST";
request.ContentType = "text/json; charset=utf-8";
request.BeginGetRequestStream(new AsyncCallback(RequestCallback), request);
}
private static void RequestCallback(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
using (Stream postStream = request.EndGetRequestStream(result))
{
User user = new User("Windows", "Phone", "USCA");
Formatting formatting = new Formatting();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string json = JsonConvert.SerializeObject(user, formatting, settings);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
postStream.Write(byteArray, 0, json.Length);
}
request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
}
private static void ResponseCallback(IAsyncResult result)
{
var request = (HttpWebRequest)result.AsyncState;
using (var response = (HttpWebResponse)request.EndGetResponse(result))
{
using (Stream streamResponse = response.GetResponseStream())
{
StreamReader reader = new StreamReader(streamResponse);
string responseString = reader.ReadToEnd();
reader.Close();
}
}
}
此代码(同样要求的非Compact Framework的版本):
HttpWebRequest request = HttpWebRequest.Create("http://staging.cloudapp.net/api/users/") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/json";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
User user = new user("Other", "Guy", "USWC");
Formatting formatting = new Formatting();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string json = JsonConvert.SerializeObject(user, formatting, settings);
writer.Write(json);
}
var response = request.GetResponse() as HttpWebResponse;
using (var reader = new StreamReader(response.GetResponseStream()))
{
var responseText = reader.ReadToEnd();
return responseText;
}
感谢您的任何帮助!
你看到的异常类型是什么? – 2012-08-13 12:18:17
这是一个System.Net.WebException - “远程服务器返回错误:未找到。”不是很有帮助。但事实上,我可以将这段代码运行在其他地方,并且在相同的API上运行它,并且如果我不执行ByteArray编码,并且在我编码到ByteArray时失败,它就会工作,这让我相信这就是问题。我只是不知道如何避开它... – 2012-08-15 02:21:50
嗯...从来没有解决这个问题,然后我在2周后回到它,它突然间工作。我会试图找出什么改变... – 2012-08-30 02:18:45