2017-02-13 5 views
1

У меня есть этот код на сервере asp.net веб-API2:параметр POST всегда нуль только в Unity3d

[HttpPost] 
    [AllowAnonymous] 
    public IHttpActionResult Login(RequestLogin args) 
    { 
     //work 
    } 

Я пытаюсь отправить запрос пост от «передовых REST клиент» с параметрами:

http://localhost:54382/api/Home/Login 
application/json 
{"Name":"asd","DeviceId":"818cd41169410e6f20ef55b2917d0e15e5cf072f"} 

... и он отлично работает! args in Login метод: полный.

Но Если я попробовать это из Unity3d:

UnityWebRequest www; 
var url = http://localhost:54382/api/Home/Login; 
string jsonObj = JsonUtility.ToJson(request.args); 
Debug.Log(jsonObj); //{"Name":"asd","DeviceId":"818cd41169410e6f20ef55b2917d0e15e5cf072f"} 
www = UnityWebRequest.Post(url, jsonObj); 
www.SetRequestHeader("Content-Type", "application/json; charset=utf-8"); 
yield return www.Send(); 

арг в методе Входа содержит нулевых значения.

[Serializable] 
    public class RequestLogin 
    { 
     public string Name; 
     public string DeviceId; 
    } 

Я ломаю голову на несколько дней. Помогите мне пожалуйста

+0

Вы говорите о Unity 3D игровой движок Unity или Dependency Injection? Извините, что задал этот вопрос, но вы неправильно ссылаетесь на пакет DI. –

+0

Unity3d игровой движок – GLeBaTi

ответ

4

У меня возникла такая же проблема после обновления Unity до версии 2017.3.0. Исправление, которое сработало для меня, - установить UnityWebRequest.chunkedTransfer на false. Мой метод пост выглядит следующим образом:

public static UnityWebRequest PostJson(string url, string json) 
    { 
     UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST); 
     byte[] bodyRaw = new System.Text.UTF8Encoding().GetBytes(json); 
     request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw); 
     request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); 
     request.SetRequestHeader("Content-Type", "application/json"); 
     request.chunkedTransfer = false; 
     return request; 
    } 
+0

Да, то же самое. Я считаю, что это первопричина. https://issuetracker.unity3d.com/issues/www-request-fails-to-get-content-length-header – montag

1

Чтение через , похоже, у вас есть возможность сделать это как так:

WWWForm form = new WWWForm(); 
form.AddField("Name", "asd"); 
form.AddField("DeviceId", "818cd41169410e6f20ef55b2917d0e15e5cf072f"); 

www = UnityWebRequest.Post(url, form); 

Вы можете попробовать его, как документация подразумевает?

+0

Не работает. То же самое: нулевые значения:/ – GLeBaTi

+0

Выполнение быстрого поиска Я нашел это http://answers.unity3d.com/questions/1068919/unet-receiving-null-string-values-in-message.html Вы также являетесь RequestLogin в обеих сборках? – Vect0rZ

+0

У меня есть общая dll с сущностями. Вставьте в Unity Plugins и добавьте в проект web api – GLeBaTi

 Смежные вопросы

  • Нет связанных вопросов^_^