【发布时间】:2020-04-12 19:50:55
【问题描述】:
我正在开发 ASP DOT NET 核心 web api,我需要发送多个附件。我试过像以下
<input type="text" id="txt_firstName" />
<input type="text" id="txt_lastName" />
<input type="file" id="file_TicketManageMent_AttachFile" multiple />
<input type="button" onclick="fnADD()" />
<script>
function fnADD(){
var input = document.getElementById('file_TicketManageMent_AttachFile');
var files = fileList;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files", files[i]);
}
var mdl = {};
mdl.FirstName = 'Title';
mdl.LastName = 'Short Description';
mdl.Attachments = formData;
$.ajax({
cache: false,
type: 'Post',
contentType: 'application/json',
data: JSON.stringify(mdl),
url: fnApiRequestUri('api/Customer/AddTicket'),
success: function (xhr, ajaxOptions, thrownError) {
}
});
}
</script>
//C# code
[Route("AddTicket")]
[HttpPost]
[Authorize(Roles = MethodsAuthorization.AllRoles)]
public async Task<IActionResult> AddTicket(Model _model)
{
}
public class Model
{
public string FirstName {get;set;}
public string LastName {get;set;}
public List<IFormFile> Attachments { get; set; }
}
【问题讨论】:
-
您不能以 JSON 格式发送并使用
FormData。FormData仅适用于multipart/form-data编码请求。要么发送FormData实例本身,要么您需要使用FileReader读取文件数据,然后将其作为 Base64 编码字符串以 JSON 格式发送。在后一种情况下,您必须绑定到byte[]而不是IFormFile服务器端,但序列化程序会自动处理从 Base64 字符串到byte[]的转换。
标签: javascript c# jquery asp.net-core asp.net-web-api