2015-04-16 14 views
6

Sono abbastanza nuovo per Unity e affronta alcuni problemi relativi a RESTFul in Unity. Desidero aggiornare alcuni dati sul server utilizzando HTTP PUT, ma come quello che ho ricevuto durante la ricerca sul Web, la classe WWWW in Unity non supporta HTTP PUT. Ho anche provato alcuni esempi di HttpWebRequest relativi a HTTP PUT ma ricevevo sempre il codice di errore 400: Bad Request.Unity: Usa HTTP PUT in Unity3D

Come posso risolvere questo problema? Devo elencare tutte le coppie chiave-valore quando si aggiorna o è solo necessario elencare le coppie che voglio modificare il valore?

risposta

0

Ho fatto ha funzionato dai seguenti codici utilizzando 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

Si consiglia di guardare BestHTTP package anziché la classe WWW predefinita. È economico (quasi tutte le risorse di Unity3d sono, rispetto ai tipici prezzi del middleware nell'industria dei videogiochi) ed è abbastanza decente, a giudicare dall'esperienza personale.

In alternativa, è possibile utilizzare lo standard .NET sockets.

+0

Ho anche controllato BestHTTP ma siamo studenti e facendo progetto chiave di volta per la laurea. Con noi, quel prezzo è un grosso problema –

+0

Allora sembra che dovrai usare i socket. La classe WWW fornita da Unity è piuttosto semplice ed è più adatta per download semplici rispetto all'interfaccia con le API. –

+0

Per la mia seconda domanda. Devo inviare tutte le coppie chiave-valore tramite HTTP PUT o solo le coppie che devo aggiornare? Perché quando eseguo il test dell'API con estensione POSTMAN per Chrome, è necessario che compili tutte le coppie chiave-valore. Si verificherà un errore se elenco solo la coppia che è necessario aggiornare –

7

Se non siete alla ricerca di un plugin 3rd party e supponendo che il server lo supporta poi un metodo si potrebbe guardare con la "X -HTTP-Method-Override "intestazione HTTP. Il client invia i dati al server tramite POST, ma il server lo gestisce come valore nell'intestazione X-HTTP-Method-Override (come PUT).

L'ho usato prima con grande efficacia dove il nostro server l'ha supportato. Un esempio di utilizzo di questo in Unity3d sarebbe lungo le linee di:

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

Grazie per la tua domanda. Ha funzionato perfettamente! –