2016-04-14 49 views
0

我想在asp.NET MVC5應用程序中使用FineUploader。當我嘗試使用FineUploader上傳文件時,在我的Controller中,我使用Base64編碼策略文檔,簽署base 64編碼文檔,然後按照文檔將結果作爲JSON對象返回。但是,在Controller返回JSON後,我在頁面上收到以下錯誤:FineUploader - 帶有JSON響應的錯誤 - 「響應不包含base64編碼策略!」

「響應不包含base64編碼策略!」

我的JSON有效負載的格式必須有問題。這裏的代碼的相關部分:

byte[] byteArrayPolicy = System.Text.Encoding.UTF8.GetBytes(jsonStringFull); 
     string base64Policy = Convert.ToBase64String(byteArrayPolicy); 

     var signature = kha.ComputeHash(Encoding.UTF8.GetBytes(base64Policy)); 
     var signatureString = ToHexString(signature, true); 

     string payloadString = @"{ ""policy"":""" + base64Policy + @"""," + @"""signature"":""" + signatureString + @"""}"; 

     JsonResult jsonRequest = Json(payloadString); 

     return jsonRequest; 

我返回的JSON對象的格式有什麼問題嗎?該政策是我從FineUploader收到的政策的完全副本,只有它是Base64編碼的。簽名是一個十六進制字符串。以下是有效負載的樣例:

"{ \"policy\":\"eyJleH...=\",\"signature\":\"da186a017b038382e2cc21dfa4f1fbf806c51adf92984a9b95f1aa845aeb72e4\"}" 

請注意Base64策略中的「...」是爲了簡潔起見。

我得到的錯誤說響應不包括Base64編碼策略,但它似乎確實包含Base64編碼策略。是否有可能我的簽名不正確?在將簽名計算爲字節數組後,它是否應該轉換爲十六進制字符串?

下面是實際的paypload,根據Chrome瀏覽器:

"{ \"policy\":\"eyJleHBpcmF0aW9uIjoiMjAxNi0wNC0xNFQxNDo0MzozMS4zOTZaIiwiY29uZGl0aW9ucyI6W3siYWNsIjoicHJpdmF0ZSJ9LHsiYnVja2V0IjoiZnVuZHRoZWZ1bmVyYWwifSx7IkNvbnRlbnQtVHlwZSI6ImltYWdlL2pwZWcifSx7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6IjIwMCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsia2V5IjoiNGZkOGIzMDMtMmQ3Zi00MWJlLThiYWItYzUyMjBiNmRlMjQ1LmpwZyJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUFKUkhDU09STExFUkpVMkVBLzIwMTYwNDE0L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IngtYW16LWRhdGUiOiIyMDE2MDQxNFQxNDM4MzFaIn0seyJ4LWFtei1tZXRhLXFxZmlsZW5hbWUiOiIyMDE2LTAzLTI0LmpwZyJ9XX0=\",\"signature\":\"c592b3bca0dedba10301e06df37760cb527ac0a83112ae9b668dce00f0b23465\"}" 
+0

我無法確定它爲什麼不是有效的JSON。據我所知,它是在文檔中指定的格式。 - http://docs.fineuploader.com/endpoint_handlers/amazon-s3.html – jjspierx

回答

1

錯誤似乎是在你的代碼。響應有效載荷,因爲你在你的答案已經說明了,是這樣的:

"{...}" 

但它應該是這樣的:

{...} 

運行響應通過JSON.parse後,結果是一個字符串而不是一個對象。

+1

完美。對於任何人在asp.net應用程序中嘗試這種方式,響應被返回爲包裝在字符串中的JSON而不僅僅是JSON對象的原因似乎是因爲我返回了JsonResult。 FineUploader不會接受JsonResult對象,因爲它將它包裝在引號中。如果將Controller返回類型設置爲「字符串」而不是「JsonResult」,則FineUploader會將該字符串解析爲JSON對象。 – jjspierx

+1

請注意,即使您的Fine Uploader實例遇到此問題,此問題也與Fin​​e Uploader無關。 Fine Uploader用來解析傳入的JSON響應數據的'JSON.parse'是Web API的一部分。任何其他需要解析JSON數據的庫都會使用相同的調用。 –