Ajax POST для API возвращает 500 (внутренняя ошибка сервера) в этой строке jquery: xhr.send (options.hasContent && options.data || null); - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь отправить объект в API с помощью AJAX, как мне решить эту проблему?

Вот мой код 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 (внутренняя ошибка сервера)

send @ jquery.js: 9837

ajax @ jquery.js: 9434

(анонимно) @ Sell.js: 30

1 Ответ

1 голос
/ 06 мая 2019
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; } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...