2017-12-27 89 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

没问题祝你好运 –

相关问题