“System.Byte [] System.Net.WebClient :: UploadData(System.String,System.String,System.Byte [])”在目标框架中不存在。
这个错误的原因在这里解释了:
这是因为Windows Phone 8使用了一个不同的.NET版本,称为Windows Phone的.NET,其中缺少其他平台上可用的某些类型。 您必须使用不同的类型替换这些类型或自己实现它们。 - http://docs.unity3d.com/Manual/wp8-faq.html 这是我的代码:
using (WebClient client = new WebClient())
{
client.Encoding = System.Text.Encoding.UTF8;
client.Headers[HttpRequestHeader.ContentType] = "application/json";
byte[] requestData = new byte[0];
string jsonRequest = "{}";
if (data != null)
{
string tempRequest = Converter.SerializeToString (data);
jsonRequest = "{\"Data\": \"" + tempRequest + "\"}";
requestData = System.Text.Encoding.UTF8.GetBytes(jsonRequest);
}
// below line of code is the culprit
byte[] returnedData = client.UploadData(url, "POST", requestData);
if(returnedData.Length > 0)
{
// do stuff
}
}
我也尝试过WebRequests,但GetResponse()会导致它崩溃,而HttpClient不存在。那么,在Windows Phone 8上,如何在Unity中发布数据而不使用WWW呢?
根据评论请求的更新 - WebRequests
这段代码使用HttpWebRequest在编辑器和Android上运行正常,但在Windows Phone上会抛出下面列出的错误。
var request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "POST";
var sw = new System.IO.StreamWriter(request.GetRequestStream(), System.Text.Encoding.UTF8);
sw.Write(jsonRequest); // jsonRequest is same variable as in above code, string with json object.
sw.Close();
var re = request.GetResponse();
string resultString = "";
using (var outputStream = new System.IO.StreamReader(re.GetResponseStream(), System.Text.Encoding.UTF8))
{
resultString = outputStream.ReadToEnd();
}
if(resultString.Length > 0)
{}
错误1:
错误:目标框架中不存在方法
System.IO.Stream System.Net.HttpWebRequest::GetRequestStream()
。
错误2:
System.Net.WebResponse System.Net.HttpWebRequest::GetResponse()
在目标框架中不存在。
更多细节更新 - UploadStringAsync
使用此代码进行异步请求,在编辑器中再次正常工作,但在WP8上会出现错误。
bool isCompleted = false;
byte[] returnedData = null;
client.UploadDataCompleted +=
new UploadDataCompletedEventHandler((object sender, UploadDataCompletedEventArgs e) =>
{
Debug.Log("return event");
returnedData = e.Result;
isCompleted =true;
});
Debug.Log("async call start");
client.UploadDataAsync(new Uri(url), requestData);
while(isCompleted == false){
Thread.Sleep(100);
}
if(returnedData.Length > 0)
{}
错误1
错误2方法
System.Void System.Net.WebClient::add_UploadDataCompleted(System.Net.UploadDataCompletedEventHandler)
在目标框架中不存在。
错误3错误:方法
System.Void System.Net.WebClient::UploadDataAsync(System.Uri,System.Byte[])
在目标框架中不存在。
错误4错误:类型
System.Net.UploadDataCompletedEventArgs
在目标框架中不存在。
错误:方法
System.Byte[] System.Net.UploadDataCompletedEventArgs::get_Result()
在目标框架中不存在。
System.Net.Sockets
请求已经解决了问题,但结果发现这也不被支持... Unity 开始变得很糟糕。 - JensB