Итак, я пытаюсь передать 1 или несколько файлов на мой .net mvc api контроллер.Все работало отлично, пока я не хотел добавить файлы.Как только я добавил возможность пытаться отправлять файлы независимо от того, что я делаю, я получаю сообщение об ошибке
Uncaught TypeError: Недопустимый вызов
Я прочитал многодругие сообщения на форуме, и большинство из них просто говорят добавить contentType: false
и processData: false
к команде ajax.Когда я делаю это, я получаю ошибку 415 обратно.Я был бы очень признателен, если бы кто-то мог объяснить, что я делаю с этим не так.
Ниже моя модель:
public class AuditStandardDto
{
[Required]
[StringLength(255)]
public string StandardName { get; set; }
[Required]
public bool IsInspect { get; set; }
[Required]
public bool IsAudit { get; set; }
[Required]
public bool IsReport { get; set; }
[Required]
public bool IsStandardReady { get; set; }
[Required]
public bool IsMaturityScore { get; set; }
[Required]
public int StandardStatusId { get; set; }
public string StandardShortName { get; set; }
public string StandardDescription { get; set; }
public string AuthoritativeSource { get; set; }
public string AuthoritativeURL { get; set; }
[Required]
public int StandardTypeId { get; set; }
public IEnumerable<HttpPostedFileBase> File { get; set; }
}
Вот мой контроллер
[HttpPost]
[Route("api/NewStandards/UpdateStandard/{id}")]
public IHttpActionResult UpdateStandard(int id,AuditStandardDto standardDto)
{
try
{
var standardInDb = _dbContext.AuditStandards.Single(s => s.Id == id);
standardInDb.StandardName = standardDto.StandardName;
standardInDb.IsInspect = standardDto.IsInspect;
standardInDb.IsAudit = standardDto.IsAudit;
standardInDb.IsReport = standardDto.IsReport;
standardInDb.IsMaturityScore = standardDto.IsMaturityScore;
standardInDb.StandardStatusId = standardDto.StandardStatusId;
standardInDb.StandardShortName = standardDto.StandardShortName;
standardInDb.StandardDescription = standardDto.StandardDescription;
standardInDb.AuthoritativeSource = standardDto.AuthoritativeSource;
standardInDb.AuthoritativeURL = standardDto.AuthoritativeURL;
standardInDb.StandardTypeId = standardDto.StandardTypeId;
standardInDb.IsStandardReady = standardInDb.IsStandardReady;
standardInDb.Updated = DateTime.Now;
_dbContext.SaveChanges();
return Ok();
}
catch
{
return BadRequest();
}
}
и наконец мой JQuery
$('#newStandard').submit(function(e) {
e.preventDefault();
var standardTypeId = $('#ddlStandardType').val();
var isInspect = $('#cbIsInspect').is(':checked');
var isAudit = $('#cbIsAudit').is(':checked');
var isReport = $('#cbIsReport').is(':checked');
var isMaturityScore = $('#cbRequiresMaturityScore').is(':checked');
var standardName = $('#txtStandardName').val();
var standardShortName = $('#txtStandardShortName').val();
var authoritativeSource = $('#txtAuthoritativeSource').val();
var authoritativeUrl = $('#txtAuthoritativeURL').val();
var standardStatusId = $('#ddlStandardStatus').val();
var standardDescription = $('#txtStandardDescription').val();
var vm = {
"standardTypeId": standardTypeId,
"isInspect": isInspect,
"isAudit": isAudit,
"isReport": isReport,
"isMaturityScore": isMaturityScore,
"standardName": standardName,
"standardShortName": standardShortName,
"authoritativeSource": authoritativeSource,
"authoritativeURL": authoritativeUrl,
"standardStatusId": standardStatusId,
"standardDescription": standardDescription
};
$('#newStandard input[type=file]').each(function(index, file) {
vm.file = file.files[0];
});
var url = '';
if ($('#hfMode').val() === 'save') {
url = '/api/newStandards/';
} else {
url = '/api/newStandards/UpdateStandard/' + $('#hfStandardId').val();
}
$.ajax({
url: url,
method: 'POST',
data: vm
})