Запрос 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.