2017-12-27 3 views
0

Ich bin ein bisschen fest hier, ich versuche, ein JSON-Objekt von meinem indexedDb gleichzeitig mit einem IFormFile-Objekt auf dem Server zu veröffentlichen. Die Methode, die es akzeptiert wie folgt aussieht:Wie kann ich ein JSON-Objekt und eine Datei auf asp.net-Server mit fetch

[HttpPost] 
    public async Task<IActionResult> Create(BatchModel model, IFormFile vinFile) 
    { 
    //logic goes here 
    } 

Diese Methode zuvor gearbeitet hat, bevor ich meine batchModels als JSON-Objekte zu speichern hatte, und wurde nur mit einem POST direkt aus dem Formular geschrieben. Vieles hat sich seitdem verändert, und jetzt wird der Kunde es laden, sobald er aus einem Offline-Zustand wieder bekommt, mit dem folgenden (vereinfacht) Methode:

if (infoChanged === true) { 
    fetchPromises.push(
     fetch('/Batch/Create/', { 
      headers: new Headers({ 
       'Content-Type': 'application/javascript' //Tried this with multi-part/form 
      }), 
      credentials: 'same-origin', 
      method: 'POST', 
      body: batch //, vinFile 
     }) 
    ); 
} 
return Promise.all(fetchPromises); 

Zum Testen habe ich versucht, die Methode zu verwenden, um mit nur das Modell gefüllt, und das einzige, was ich ändern musste, war, dass ich in den C# -Code ändern musste, war ein [FromBody] -Tag, aber jetzt brauche ich auch die VinFile gefüllt. Ich habe es bereits mit einem FormData-Objekt versucht, indem ich den Batch und die vinFile mit dem gleichen Namen angehängt habe wie in der Create-Funktion. Aber das würde beide Variablen als null ergeben.

Antwort

0

Das Schlüsselmerkmal, das Sie betrachten müssen, ist Ihre Überschrift. Sie können Ihre Antwort auf JSON ändern, wenn Sie header: {Content-Type: "application/json"}

Sie möchten etwas wie das: Sie müssen den Typ selbst konfigurieren.

fetch(myRequest).then(function(response) { 
    var contentType = response.headers.get("content-type"); 
    if(contentType && contentType.includes("application/json")) { 
     return response.json(); 
    } 
    throw new TypeError("Oops, we haven't got JSON!"); 
    }) 
    .then(function(json) { /* process your JSON further */ }) 
    .catch(function(error) { console.log(error); }); 

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

+0

Wenn Sie auch konvertieren Sie Ihre Art auf der Server-Seite versucht, Sie könnten einen Tauchgang in NewtonSoft https://www.newtonsoft.com/json –

+0

Hey Dank für das nehmen wollen Antwort, aber ich versuche, ein "Post", nicht ein "Get" zu tun. Und ich kann es nicht zu application/json ändern, weil ich versuche, sowohl eine json- als auch eine .csv-Datei gleichzeitig zu posten. Ich habe mehr über Multipart/Form-Daten nachgedacht, aber das scheint auch nicht zu funktionieren. Ich werde aber newtonsoft sehen! – Typhaon

+0

Kein Problem viel Glück für Sie –

Verwandte Themen