2015-04-16 33 views
6

Unity'de oldukça yeni ve Unity'deki RESTFul ile ilgili bazı sorunlarla karşılaşıyorum. Sunucudaki bazı verileri HTTP PUT kullanarak güncelleştirmek istiyorum, ancak web'de arama yaptığımda aldığım WWWW sınıfı HTTP PUT özelliğini desteklemiyor. Ayrıca HTTP PUT ile ilgili bazı HttpWebRequest örneklerini denedim, ancak her zaman hata kodu 400: Hatalı İstek aldı.Birlik: Unity3D içinde HTTP PUT kullanın

Bu sorunu nasıl çözebilirim? Güncelleme yaparken tüm anahtar/değer çiftlerini listelemeli mi yoksa değeri değiştirmek istediğim çiftleri mi listelemeliyim?

cevap

0

Sana bir 3. parti eklenti arayan ve sunucu varsayarak o zaman kullandığınız bakmak edebilecek tek yöntem "X destekler değilseniz o HttpWebRequest

void updatePlayer(){ 
    var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://yourAPIUrl"); 
    httpWebRequest.ContentType = "text/json"; 
    httpWebRequest.Method = "PUT"; 

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
    { 
     string json = "{" + 
      "'ID': '100'," + 
      "'ClubName': 'DEF'," + 
      "'Number': 102," + 
      "'Name': 'AnNT'," + 
      "'Position': 'GK'," + 
      "'DateOfBirth': '2010-06-15T00:00:00'," + 
      "'PlaceOfBirth': 'Hanoi'," + 
      "'Weight': 55," + 
      "'Height': 1.55," + 
      "'Description': 'des'," + 
      "'ImageLink': 'annt.png'," + 
      "'Status': false," + 
      "'Age': '12'" + 
      "}";    
     streamWriter.Write(json); 
    } 
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     var responseText = streamReader.ReadToEnd(); 
     //Now you have your response. 
     //or false depending on information in the response 
     Debug.Log(responseText);    
    } 
} 
1

Varsayılan WWW sınıfı yerine BestHTTP package'a bakmanızı öneririm. Ucuz (neredeyse tüm Unity3d varlıkları, oyun endüstrisindeki tipik katman yazılım fiyatlarına kıyasla) ve kişisel deneyimlerle yargılanmak oldukça iyi.

Alternatif olarak, standart .NET sockets'u kullanabilirsiniz.

+0

Ayrıca BestHTTP'yi de kontrol ettim, fakat biz öğrenciyiz ve mezuniyet için bir kapak projesi yapıyoruz. Bizimle, bu fiyat büyük bir problemdir –

+0

Ardından Soket kullanmanız gerekecek gibi görünüyor. Unity tarafından sağlanan WWW sınıfı oldukça basittir ve apis ile arayüz oluşturmadan basit indirmeler için daha uygundur. –

+0

2. soru için. Tüm anahtar/değer çiftlerini HTTP PUT veya sadece güncellemem gereken çiftler aracılığıyla göndermem gerekir mi? API'yi Chrome için POSTMAN uzantısıyla test ettiğimde, tüm anahtar/değer çiftlerini doldurmam gerekiyor. Eğer sadece güncelleme olan çiftleri listelediğimde hata oluşacaktır –

7

kullanarak aşağıdaki kodlar ile çalışmış yapılan -HTTP-Method-Geçersiz kılma "HTTP başlığı. İstemciniz verileri POST yoluyla sunucuya gönderir, ancak sunucu bunu X-HTTP-Method-Override başlığında (PUT gibi) değer olarak ele alır.

Sunucumuzun desteklediği yerde büyük etki yaratmak için bunu daha önce kullandım. Unity3d'de bunu kullanmanın bir örneği şu şekilde olabilir:

string url = "http://yourserver.com/endpoint"; 
byte[] body = Encoding.UTF8.GetBytes(json);  

Dictionary<string, string> headers = new Dictionary<string, string>(); 
headers.Add("Content-Type", "application/json"); 
headers.Add("X-HTTP-Method-Override", "PUT"); 
WWW www = new WWW(url, body, headers); 
+1

Sorunuz için teşekkürler. Mükemmel çalıştı! –

İlgili konular