您好,我正在尝试将来自angular6的请求发布到asp.net核心Web api,但是很遗憾,该请求从未在服务器上收到,并且始终保持“待处理”状态。
我在服务器上的模型:
public class MainVM
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public int DepartmentID { get; set; }
public IFormFile Logo { get; set; }
public List<ChildVM> ListChilds { get; set; }
}
public class ChildVM
{
public string Name { get; set; }
public int SequenceNo { get; set; }
public int NoOfPrices { get; set; }
public IFormFile Image { get; set; }
}
和终点:
[HttpPost]
[Consumes("multipart/form-data")]
public void Post([FromForm]MainVM data)
{
}
我用于从angular发布数据的Angular6服务:
const formData: FormData = new FormData();
//formData.append('Logo', logo, logo.name);
formData.append('Name', obj.Name);
formData.append('ListChilds[0].Name', obj.ListChilds[0].Name);
formData.append('ListChilds[0].SequenceNo', String(obj.ListChilds[0].SequenceNo));
formData.append('ListChilds[0].NoOfPrices', String(obj.ListChilds[0].NoOfPrices));
return this.http.post<MainVM>('http://localhost:60458/api/mycontroller/', formData).pipe(
map((res) => { console.log('res'); return res; }),
catchError(this.handleError('lpc', null))
);
当我在formData中注释掉与ListChilds相关的代码时,请求会在Web api上收到,但该请求不会在使用ListChilds的Web api上收到。
我想我缺少什么。
请指导。
谢谢。
答案 0 :(得分:0)
尝试一下-
formData.append('ListChilds', JSON.stringify(obj.ListChilds));
它应该将obj.ListChilds中的所有值填充到ListChilds中。
答案 1 :(得分:0)
最后发现这是Asp.net Core 2.2中的错误,我在这里找到了它:
问题是当我们在子模型中使用IFormFile类型时,Asp.net core 2.2程序开始挂起(如上面的链接中所述)。
作为解决方法,我从ChildVM中删除了以下行:
public IFormFile Image { get; set; }
并在MainVM中添加以下行:
public List<IFormFile> ListImage { get; set; }