Ajax POST到api在此jquery行返回500(内部服务器错误):xhr.send(options.hasContent && options.data || null);

时间:2019-05-05 18:25:13

标签: asp.net-mvc asp.net-ajax

我正在尝试使用ajax将对象发送到api,如何解决此问题?

这是我的JavaScript代码:

var order = {

    ClientId: 0,

    products: []

};



document.querySelector('.btn-order').addEventListener('click', function () 

{

    var answer = window.confirm("?");

    if (answer) {

        orden.ClientId = document.querySelector('.client').value;

        console.log(order);

        console.log(JSON.stringify(order));

        $.ajax({

            type: 'POST',

            url: '/Orders/Create1',

            data: JSON.stringify(order),

            contentType: 'application/json; charset=utf-8',



            dataType: 'json',

            success: function (result) {

                alert('success');

            },

            error: function (result) {

                alert(result.responseText);

            }


        });

    }

});

这是控制器代码:

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Create([FromBody]Order order)

{

    return Json(new { msg = "Success" });

}

Model classes:

public class Order

{

    public int ClientId { get; set; }

    public List<ProductsOrder> products { get; set; } 

}



public class ProductsOrder

{

    public int ProductId { get; set; }

    public int quantity { get; set; }

    public decimal subtotal { get; set; }

}

服务器返回错误,这是浏览器的响应:

  

POST http://localhost:9019/Orders/Create 500(内部服务器错误)

     

发送@ jquery.js:9837

     

ajax @ jquery.js:9434

     

(匿名)@ Sell.js:30

1 个答案:

答案 0 :(得分:1)

order.ClientId = document.querySelector('.client').value;

您需要检查document.querySelector('.client').value是否为数字值,可能是字符串为空或未定义,以及是否将其发送到控制器。 Model Binding无法转换为int值。

500(内部服务器错误)出现在控制器操作源代码处。 为了防止投放问题,您可以将int ClientId更改为int? ClientId

public class Order
{
    public int? ClientId { get; set; }
    public List<ProductsOrder> products { get; set; } 
}