при использовании contentType: 'application/json; charset=utf-8', то мои данные не передаются на контроллер API

Я обновляю запись с помощью PUT в веб-API, когда использую contentType: 'application/json; charset=utf-8', то мои данные не передаются контроллеру API, но когда я комментирую эту строку, данные передаются. кто-нибудь может это объяснить? ниже мой звонок из представления mvc

$(function () {
        $("#btnSubmit").click(function () {
            var id = $("#hdnProductID").val();
            var ProductName = $("#txtProductName").val();
            var QuantityPerUnit = $("#txtQuantityPerUnit").val();
            var ReorderLevel = $("#txtReorderLevel").val();
            var UnitPrice = $("#txtUnitPrice").val();
            var UnitsInStock = $("#txtUnitsInStock").val();
            var UnitsOnOrder = $("#txtUnitsOnOrder").val();

            $.ajax({
                url: "http://localhost:2821/api/Products"+ "/" + id,
                type: 'PUT',
                contentType: 'application/json; charset=utf-8',
                data:{ProductName:ProductName,QuantityPerUnit:QuantityPerUnit,ReorderLevel:ReorderLevel,UnitPrice:UnitPrice,UnitsInStock:UnitsInStock,UnitsOnOrder:UnitsOnOrder},
                success: function (data) {
                    alert("success");
                },
                error: function (msg) {
                    alert(msg);
                }

            });
        });
    });

Ниже мой метод контроллера

public IHttpActionResult PutProduct(int id, Product product)
 {}

person Muzammil    schedule 05.11.2015    source источник
comment
попробуй data:JSON.stringify({ProductName:ProductName,QuantityPerUnit:QuantityPerUnit,ReorderLevel:ReorderLevel,UnitPrice:UnitPrice,UnitsInStock:UnitsInStock,UnitsOnOrder:UnitsOnOrder})   -  person T J    schedule 05.11.2015
comment
@Muzammil Действителен ли contentType: 'application/json; charset=utf-8',? Вы пробовали только contentType: 'application/json;? См. это: stackoverflow.com/ вопросы/477816/   -  person zer00ne    schedule 05.11.2015
comment
@ zer00ne кодировка не нужна, потому что единственная допустимая кодировка с запросами ajax - это utf-8, но это не должно быть проблемой. Проблема в том, что OP сообщает серверу, что JSON отправлен, но OP не передает данные в формате JSON с data.   -  person t.niese    schedule 05.11.2015


Ответы (1)


Если contentType не указан в запросе, он принимает contentType по умолчанию, т. е. «application/x-www-form-urlencoded; charset=UTF-8», и нет необходимости вводить данные публикации в строку, но если contentType равен «application/json; charset=utf-8", необходимо явно указывать данные публикации. Так должно быть:

    $.ajax({
            url: "http://localhost:2821/api/Products"+ "/" + id,
            type: 'PUT',
            contentType: 'application/json; charset=utf-8',
            data:JSON.stringify({ProductName:ProductName,QuantityPerUnit:QuantityPerUnit,ReorderLevel:ReorderLevel,UnitPrice:UnitPrice,UnitsInStock:UnitsInStock,UnitsOnOrder:UnitsOnOrder}),
            success: function (data) {
                alert("success");
            },
            error: function (msg) {
                alert(msg);
            }

        });
person Sudipta Kumar Maiti    schedule 05.11.2015