我正在将文件从jquery ajax发送到asp.net核心Web api,但是Web api会将每个属性都接受为null。
public class YuklenecekDosya
{
public IFormFile File { get; set; }
public int ID { get; }
public string TableAdi { get; }
}
[HttpPost]
public IActionResult Upload([FromForm]YuklenecekDosya File)
{
var file = File.File;
if (file == null || file.Length == 0)
return Content("Yuklenecek fayl Secmemisiniz!");
if (file.Length > 0)
{
string path = Path.Combine(_env.WebRootPath, "Dosyalar");
string fullfilepath = Path.Combine(path, file.FileName);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
using (var fs=new FileStream(fullfilepath, FileMode.Create))
{
file.CopyTo(fs);
}
return new OkObjectResult(file);
}
return BadRequest();
}
和clintside ajax代码如下:
let f=new FormData();
f.append('File',$('input').files[0]);
let File={
File:f,
iD:2,
tableAdi:"Table1"
};
$.ajax({
method:'Post',
url:'api/Values/Upload',
data:File,
processData:false,
contentType:false,
enctype: 'multipart/form-data',
}).then(model=>{
console.log(model);
});
当我调试它时,YuklenecekDosya参数中的所有内容都为null。 我不知道哪里出了问题。 顺便说一句,当我尝试将参数仅作为IFormFile而不是YuklenecekDosya时,它可以工作,但是当我将IFormFile作为YuklenecekDosya参数的属性时,它将所有属性设置为空
答案 0 :(得分:0)
尝试一下:
因此$ajax
的呼叫将是:
let f = new FormData();
f.append('File', $('input').files[0]);
f.append('ID', 2);
f.append('TableAdi', 'Table1');
$.ajax({
method: 'Post',
url: 'api/Values/Upload',
data: f, <-- Here pass f
processData: false,
contentType: false,
enctype: 'multipart/form-data',
}).then(model => {
console.log(model);
});
答案 1 :(得分:0)
关键问题是您没有在媒体资源上提供set
实现,请将YuklenecekDosya
类修改为:
public class YuklenecekDosya
{
public IFormFile File { get; set; }
public int ID { get; set; }
public string TableAdi { get; set; }
}
然后修改您的JavaScript代码,例如:
let f = new FormData();
f.append('File', $('input').files[0]);
f.append('ID', 2);
f.append('TableAdi', 'Table1');
$.ajax({
method: 'Post',
url: '../api/Values/Upload',
data: f,
processData: false,
contentType: false,
}).then(model => {
console.log(model);
});
此外,如果您的标记类似于:
<input type="file" name="files" id="files" >
在javascript中,您可以使用:
let f = new FormData();
f.append('File', $('#files').get(0).files[0]);