2017-03-22 52 views
0

我有一個接受JSON數據的ASP.NET Web API服務。它適用於我們所有的JSON數據類型,除了一個之外。用戶可以從移動設備發送檢測結果。檢查結果由JSON作爲ASP.NET Web API服務接收。JSON在從網頁傳遞到ASP.NET Web API服務時被截斷

我有用C#編寫的單元測試,能夠發送檢查JSON數據,沒有問題。但是每當我從網頁發送數據時,發送的JSON數據似乎都會被截斷。

這是發送的內容。

{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic"}]},"Profile":{"EmailAddress":"[email protected]","OscarId":"1011369"}}; 

這就是收到的。

{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic" 

它在254

的長度越來越截斷下面是創建請求的AJAX。

var url = "http://mywebservice/api/routingtasks?formname=inspection"; 

     $.ajax({ 
      type: "POST", 
      url: url, 
      contentType: "application/json", 
      headers: { "Authorization" : "TESTUSER " + signedToken}, 
      data: JSON.stringify(formdata), 
      success: function(data){ 
       alert("Task successfully processed."); 
      }, 
      error: function(error){ 
       alert("error: " + JSON.stringify(error)); 
      } 
     }) 

接收JSON數據的Web API控制器的簽名是這樣的。

public HttpResponseMessage RoutePostData(string formname, [FromBody] JToken postdata) 

我的C#單元測試都能夠發送相同的JSON數據沒有問題,但是從網頁發送JSON數據是造成問題。

+0

由於254不是隨機數(字節),截斷長度可能會提示答案。在應用程序的設置中可能會限制發送緩衝區大小嗎? – JuanR

+0

當我看到數字254時,這也是我的想法。它看起來如此,但我不知道什麼設置會影響JSON的大小。 – DomBurf

回答

0

如果formdata已經是javascript對象,則不需要stringify它。

$.ajax({ 
      type: "POST", 
      url: url, 
      contentType: "application/json", 
      headers: { "Authorization" : "TESTUSER " + signedToken}, 
      data: formdata, 
      success: function(data){ 
       alert("Task successfully processed."); 
      }, 
      error: function(error){ 
       alert("error: " + JSON.stringify(error)); 
      } 
     }) 

你可以閱讀更多的文檔頁面:http://api.jquery.com/jQuery.ajax/

0

您的JSON是錯誤的。 「個人資料」:{「EmailAddress」大括號缺失。不知道它是複製粘貼錯誤還是代碼錯誤。然而,它在夢幻之後立即截斷。

您的JSON更改爲

{"Formname":"inspection","Formdata":{"UserId":1011357,"InspectionId":40013,"VehicleReg":"AA123ABC","Results":[{"QuestionId":100053,"OptionId":30192,"OptionResponse":"fantastic"}]},"Profile":{"EmailAddress":"[email protected]","OscarId":"1011369"}} 
+0

這是一個複製粘貼錯誤。我現在修復了這個問題。 – DomBurf

+0

你能檢查http post請求體嗎?發送了什麼?您可以使用fiddler或瀏覽器devtool網絡來檢查線路上發送的確切有效負載。只是爲了交叉檢查,如果有什麼東西在客戶端截斷請求體。因爲你的內容長度是250。內容長度:250 – Kaushal

+0

根據Fiddler,整個JSON有效負載正在發送 – DomBurf

0

試試這個:

<configuration> 
    <appSettings> 
      <add key="aspnet:MaxJsonDeserializerMembers" value="5000" /> 
    </appSettings> 
</configuration> 

值設置爲您所選擇的東西。

+0

此值是否影響通過HTTP請求傳入數據的反序列化?或者它隻影響在代碼中手動反序列化的數據? – DomBurf

+0

它適用於使用JavaScriptSerializer類的情況。 – JuanR

+0

然後這不會有任何影響。看起來,它是截斷JSON的HTTP請求,因爲我可以從我的C#單元測試中發出完全相同的請求而不會出現問題。所以這個問題必須是網絡/瀏覽器/ AJAX如何組成請求。 – DomBurf