Desidero inviare un oggetto da un controller WebApi
a una pagina HTML tramite una richiesta Ajax
.Protobuf: WebApi -> JS - L'oggetto decodificato è vuoto
Quando ricevo l'oggetto in JS, è vuoto. Ma sul lato server l'oggetto non è vuoto perchè quando guardo il byte[].length
è maggiore di 0.
- lato server, io uso il dll provided by Google.
lato JS, io uso il ProtobufJS library. Questo è il mio
.proto
di file: Codicesyntax="proto3"; message Container { repeated TestModel2 Models = 1; } message TestModel2 { string Property1 = 1; bool Property2 = 2; double Property3 = 3; }
Server:
var container = new Container(); var model = new TestModel2 { Property1 = "Test", Property2 = true, Property3 = 3.14 };
container.Models.Add (modello); Dati
Base64:
ChEKBFRlc3QQARkfhetRuB4JQA ==
JS decodifica:
var ProtoBuf = dcodeIO.ProtoBuf; var xhr = ProtoBuf.Util.XHR(); xhr.open( /* method */ "GET", /* file */ "/XXXX/Protobuf/GetProtoData", /* async */ true ); xhr.responseType = "arraybuffer"; xhr.onload = function (evt) { var testModelBuilder = ProtoBuf.loadProtoFile( "URL_TO_PROTO_FILE", "Container.proto").build("Container"); var msg = testModelBuilder.decode64(xhr.response); console.log(JSON.stringify(msg, null, 4)); // Correctly decoded } xhr.send(null);
oggetto Risultato in console JS :
{ "Models": [] }
bytebuffer.js
- protobuf.js V5.0.1
Quindi la richiesta ha successo, soltanto - l'oggetto che ricevete è vuoto? Prova a eseguire la richiesta direttamente nel browser e visualizza l'output e quindi condividi l'output con noi :) – KDOT
Sembra che quando JS decodifica il messaggio, l'oggetto sia o vuoto o il processo di decodifica non possa riuscire, quindi ottengo il valore predefinito stato oggetto Cosa intendi con "esecuzione della richiesta direttamente nel browser"? – Guillaume
Ok se non sei sicuro se è solo vuoto o il processo di decodifica non sta completando - rimuovi il processo di decodifica e solo 'console.log' la risposta.Se non è vuoto, possiamo passare attraverso il processo di decodifica. Dobbiamo vedere l'errore perché non possiamo eseguire il debugging per te. Suppongo che tu non stia eseguendo l'autenticazione delle intestazioni sulle richieste con le chiavi, quindi se è così, dovresti essere in grado di richiederle direttamente tramite l'URL come vedere la risposta assoluta che la richiesta * AJAX * otterrebbe, quindi lavorare da lì. Questo presuppone che questa API sia stata costruita anche da te. – KDOT