2016-04-14 8 views
0

Ich versuche FineUploader in einer ASP.NET MVC5-Anwendung zu verwenden. Wenn ich versuche, eine Datei mit FineUploader hochzuladen, binde ich in meinem Controller Base64 das Richtliniendokument, signiere das Basis-64-codierte Dokument und gebe dann die Ergebnisse als ein JSON-Objekt gemäß der Dokumentation zurück. Ich erhalte jedoch den folgenden Fehler auf meiner Seite, nachdem der Controller den JSON zurückgibt:FineUploader - Fehler bei der JSON-Antwort - "Die Antwort enthält die base64-kodierte Richtlinie nicht!"

"Response enthält nicht die Base64-codierte Richtlinie!"

Es muss etwas mit der Formatierung meiner JSON-Nutzdaten nicht stimmen. Hier der relative Teil des Codes:

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; 

Gibt es etwas falsch mit der Formatierung des JSON-Objekts, das ich zurückgebe? Die Richtlinie ist eine exakte Kopie der Richtlinie, die ich von FineUploader erhalten habe, nur wurde sie Base64-codiert. Die Signatur ist eine hexadezimale Zeichenfolge. Hier ist ein Beispiel von dem, was Nutzlast wie folgt aussieht:

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

Beachten Sie die „...“ in der Base64 Politik der Kürze halber war.

Der Fehler, den ich erhalte, besagt, dass die Antwort keine Base64-codierte Richtlinie enthält, aber es scheint mir, dass sie die Base64-codierte Richtlinie enthält. Ist es möglich, dass meine Unterschrift falsch ist? Sollte es nicht in eine Hex-Zeichenfolge umgewandelt werden, nachdem ich die Signatur als Byte-Array berechnet habe?

Hier ist die eigentliche paypload nach Chrome:

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

Ich kann nicht feststellen, warum es nicht gültig JSON ist. Es ist in dem Format, das in der Dokumentation angegeben ist, soweit ich das beurteilen kann. - http://docs.fineuploader.com/endpoint_handlers/amazon-s3.html – jjspierx

Antwort

1

Der Fehler hat in Ihrem Code zu sein scheinen. Die Antwort Nutzlast, wie Sie in Ihrer Antwort dargestellt haben, ist dies:

"{...}" 

Aber es sollte sein:

{...} 

Nach dem Ausführen Ihre Antwort durch JSON.parse, ist das Ergebnis eine einzelne Zeichenfolge anstelle eines Objekts.

+1

Perfekt. Für jeden, der dies in einer ASP.NET-Anwendung versucht, liegt der Grund dafür, dass die Antwort als JSON zurückgegeben wurde, in eine Zeichenfolge eingeschlossen, und nicht nur das JSON-Objekt, da ich ein JsonResult zurückgegeben habe. FineUploader akzeptiert kein JsonResult-Objekt, da es in Anführungszeichen eingeschlossen wird. Wenn Sie den Rückgabetyp Controller auf "string" anstelle von "JsonResult" setzen, analysiert FineUploader die Zeichenfolge als JSON-Objekt. – jjspierx

+1

Nur ein Hinweis, dass dieses Problem wirklich nichts mit Fine Uploader zu tun hat, obwohl dieses Problem mit Ihrer Fine Uploader-Instanz auftritt. 'JSON.parse', mit dem Fine Uploader eingehende JSON-Antwortdaten analysiert, ist Teil der Web-API. Jede andere Bibliothek, die JSON-Daten analysieren muss, würde denselben Aufruf verwenden. –