เมื่อใช้ contentType: 'application/json; charset=utf-8' ข้อมูลของฉันจะไม่ถูกส่งไปยังตัวควบคุม api

ฉันกำลังอัปเดตบันทึกโดยใช้ PUT ใน web 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" จำเป็นต้อง stringfy โพสต์ข้อมูลอย่างชัดเจน ดังนั้นมันควรจะเป็น:

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