2015-04-16 1 views
6

Я совершенно новый для Unity и столкнулся с некоторыми проблемами RESTFul в Unity. Я хочу обновить некоторые данные на сервере с помощью HTTP PUT, но как то, что я получил при поиске в Интернете, класс WWWW в Unity не поддерживает HTTP PUT. Я также попробовал пример HttpWebRequest, связанный с HTTP PUT, но всегда получал код ошибки 400: Bad Request.Единство: используйте HTTP PUT в Unity3D

Как я могу решить эту проблему? Должен ли я указывать все пары ключ-значение при обновлении или просто нужно перечислять пары, которые я хочу изменить?

ответ

0

Я сделал это работает на следующих кодов с помощью 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

Рекомендую посмотреть BestHTTP package вместо стандартного WWW-класса. Это дешево (почти все активы Unity3d по сравнению с типичными ценами промежуточного программного обеспечения в игровой индустрии), и это довольно прилично, судя по личному опыту.

В качестве альтернативы вы можете использовать стандартные .NET sockets.

+0

Я также проверил BestHTTP, но мы изучаем и делаем проект capstone для окончания. С нами эта цена является большой проблемой. –

+0

Тогда, похоже, вам придется использовать сокеты. WWW-класс, предоставляемый Unity, довольно простой и более подходит для простых загрузок, чем сопряжение с apis. –

+0

Для моего второго вопроса. Нужно ли мне отправлять все пары ключ-значение через HTTP PUT или только пары, которые мне нужно обновить? Потому что, когда я тестирую API с расширением POSTMAN для Chrome, он требует, чтобы я заполнял все пары ключ-значение. Ошибка возникает, если я перечисляю только пару, которая нуждается в обновлении. –

7

Если вы не ищете 3 плагина партии и предполагается, что ваш сервер поддерживает это, то один метод, который вы могли бы посмотреть на использование является «X -HTTP-Method-Override "HTTP-заголовок. Ваш клиент отправляет данные на сервер через POST, но сервер обрабатывает это как значение в заголовке X-HTTP-Method-Override (например, PUT).

Я использовал это раньше, чтобы отлично работать там, где наш сервер поддерживал его. Пример использования этого в Unity3d был бы в соответствии с:

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

Спасибо за ваш вопрос. Это сработало отлично! –