Использование AJAX для отправки объекта, включая значение массива, в действие контроллера MVC. Точка останова показывает, что действие достигнуто, но объект, получающий строковый массив, является нулевым.
Вызов на Asp.net MVC Web Api Вызов осуществляется с использованием AJAX. Объект создается, затем используется JSON.Stringify. Объект параметра действия MVC настроен на получение значений из вызова AJAX. Я пробовал атрибут [HttpPost], а также [Route ("api / Controller")]. Я также пытался в javascript, чтобы сохранить объект в другом объекте. Затем использовал JSON.stringify, а затем установите его в качестве параметра «данных» ajax.
Код JavaScript
//var data = {
// Apimethod: null,
// Employees: [],
// Type: null
//};
var data = [];
//var jsonData = JSON.stringify(data);
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
url: "api/{controller}/" + data.Apimethod,
data: { employees: data }
//traditional: true
}).done(function (response) {
$('#modelmsg').empty();
$('#modelmsg').append(response);
return returnguid = response;
}).fail(function (response) {
console.log('Error: ' + response);
});
WebApiConfig
config.Routes.MapHttpRoute(
name: "Name",
routeTemplate: "api/{controller}/{action}/{employees}",
defaults: new { action = "{name}", employees = RouteParameter.Optional }
);
MVC Controller
```c#
[Route("api/{controller}/{employees}")]
public IHttpActionResult InsertEmployeesIntoRDLTable(EmployeeList employees)
{
//Code Here
return Json(response);
}
Объект класса EmployeeList
public class EmployeeList
{
public string Apimethod { get; set; }
public string[] Employees { get; set; }
public string Type { get; set; }
}
Ошибка, полученная по http-ссылке, которая создается при вызове ajax:
MediaTypeFormatter не доступен для чтения объекта типа 'String []' из содержимого с типом носителя 'application / octet-stream'.
Ожидаемый результат в целом - получение параметров от AJAX Call. Но класс Object остается нулевым.
Обновление
Извлечение, как показано ниже, похоже, работает. Просто не совсем уверен, почему.
Итак, я обнаружил, что fetch сделает эту работу. Я не уверен на 100%, почему, но это так.
fetch(url, {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'credentials': 'include'
},
body: jsonData
})
.then(response => {
return response.json();
})
.then(response => {
//code
})
.catch(function (e) {
//code
});