2017-02-13 82 views
1

我有asp.net網站API2服務器上驗證碼:POST參數始終是空只在Unity3d

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

我試圖從「先進REST客戶」發送POST請求與參數:

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

...它工作完美!在登錄方法中的參數是full

但 如果我試試這個從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(); 

ARGS包含值。

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

我傷了好幾天。請幫助我

+0

你在說的是Unity 3D遊戲引擎還是Unity依賴注入?很抱歉問這個問題,但是你錯誤地引用了DI軟件包。 –

+0

Unity3d遊戲引擎 – GLeBaTi

回答

4

我升級團結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插件並添加到web api項目 – GLeBaTi