2017-12-27 90 views
0

我有點卡在這裏,我試圖從我的indexedDb發佈一個json對象,同時將一個IFormFile對象發佈到服務器。接受它的方法是這樣的:如何發佈json對象和文件到具有抓取的asp​​.net服務器

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

這種方法以前能用,以前我曾來存儲我batchModels爲JSON對象,並剛剛發佈了直接從一個POST形式。自那時以來發生了很多變化,現在的他在網上再從離線狀態獲得,具有以下(簡化)方法,客戶端會盡快上傳:

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); 

爲了測試我試圖用該方法只有模型填充了,唯一需要改變的是我必須在C#代碼中添加一個[FromBody]標籤,但現在我需要填充vinFile。 我已經用FormData對象試了一下,在Create函數中添加了同名的vinFile和batch。但是這會導致兩個變量都爲空。

回答

0

你需要看的關鍵特徵是你的標題。你可以改變你的響應爲JSON,如果你做標題:{Content-Type:「application/json」}

你想要的東西是這樣的:你需要自己配置類型。

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

如果你也想你的類型轉換在服務器端,你可能要採取潛入了NewtonSoft https://www.newtonsoft.com/json –

+0

嘿感謝迴應,但我試圖做一個'後'而不是'得到'。我不能將它更改爲application/json,因爲我試圖同時發佈json和.csv文件。我正在考慮更多關於multipart/form-data,但是這似乎也不起作用。 雖然我會看看牛頓軟件! – Typhaon

+0

沒問題祝你好運 –

相關問題