Запрос Ajax PUT для Web Api

В настоящее время у меня есть настройка запроса ajax для отправки запроса "PUT" на веб-api в моем проекте mvc 4. Мой запрос может войти в метод на api, но параметр всегда равен нулю. Любые идеи почему? Я также проверяю запрос PUT как выполненный, и он отправляет строку пар ключ/значение для каждого элемента управления формой. Вот мой код:

Метод Web Api (выбор всегда равен нулю)

public void Put([FromBody]string selection)
{
}

Обновить:

Я забыл, что делал небольшую отладку. Я подтвердил, что при сериализации формы param называется "selection". Пожалуйста, взгляните еще раз.

Ajax call:

$.ajax({
 type: "PUT",
 url: urlPrefix + "api/file/Manipulate",
 data: $("#frmManipulate").serialize(),
 contentType: "application/json; charset=utf-8",
 dataType: "json",
 statusCode: {
 204: function (jqXHR) {
 alert("No file(s)/Directory(s) were selected.");
 }
 }
}).done(function () {
 location.reload();
});
2 ответа

Это null, потому что вы не передаете его:

data: { val1 : "test", val2 : "test2"}

Пытаться:

data: { selection : "something" }


Он равен null, потому что asp.net web api не знает, как десериализовать { val1: "test", val2: "test2"} в строку. Вы можете использовать DTO, чтобы передать эту информацию в действие, для примера:

в проекте web api добавьте класс следующим образом:

public class InfoDTO
{
 public string val1 { get; set; }
 public string val2 { get; set; } 

 // other properties if you need
}

И измените действие put, чтобы получить параметр с этим типом:

public void Put([FromBody]InfoDTO info)
{
 // use 'info' object
}

Ваш javascript на стороне клиента может поддерживать один и тот же код.

licensed under cc by-sa 3.0 with attribution.