saat menggunakan contentType: 'application/json; charset=utf-8', maka data saya tidak diteruskan ke pengontrol api

Saya sedang memperbarui catatan menggunakan PUT di api web, ketika saya menggunakan contentType: 'application/json; charset=utf-8', maka data saya tidak diteruskan ke pengontrol api tetapi ketika saya berkomentar, data baris ini ditransfer. adakah yang bisa menjelaskan hal ini? di bawah ini adalah Panggilan saya dari tampilan 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);
                }

            });
        });
    });

Di bawah ini adalah metode pengontrol saya

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

person Muzammil    schedule 05.11.2015    source sumber
comment
coba data:JSON.stringify({ProductName:ProductName,QuantityPerUnit:QuantityPerUnit,ReorderLevel:ReorderLevel,UnitPrice:UnitPrice,UnitsInStock:UnitsInStock,UnitsOnOrder:UnitsOnOrder})   -  person T J    schedule 05.11.2015
comment
@Muzammil Apakah contentType: 'application/json; charset=utf-8', valid? Sudahkah Anda mencoba contentType: 'application/json; saja? Lihat ini: stackoverflow.com/ pertanyaan/477816/   -  person zer00ne    schedule 05.11.2015
comment
@ zer00ne rangkaian karakter tidak diperlukan karena satu-satunya yang valid dengan permintaan ajax adalah utf-8, tetapi itu seharusnya tidak menjadi masalah. Masalahnya adalah OP memberi tahu server bahwa JSON telah dikirim tetapi OP tidak meneruskan data berformat JSON apa pun dengan data.   -  person t.niese    schedule 05.11.2015


Jawaban (1)


Jika contentType tidak ditentukan dalam permintaan, dibutuhkan contentType default, yaitu, "application/x-www-form-urlencoded; charset=UTF-8" dan tidak perlu merangkai data postingan tetapi jika contentType adalah "application/json; charset=utf-8", perlu merangkai data posting secara eksplisit. Jadi seharusnya:

    $.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