Почему Javascript POST-запрос к ASP. NET действию контроллера получает параметр NULL? - PullRequest
0 голосов
/ 21 января 2020

Параметры моего метода контроллера ASP. NET остаются нулевыми, когда я отправляю XmlHttpRequets из моего JavaScript файла. Отладчик JavaScript показывает, что запрос успешно отправлен. Почему это не работает?

JavaScript Функция:

function BuyBook(title) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("POST", "home/BuyBook", true);
    xmlHttp.setRequestHeader("Content-Type", "multipart/form-data");
    var order = { BookTitle: title, Quantity: document.getElementById("quantity").value };
    xmlHttp.send(JSON.stringify({ order: order }));
    console.log(xmlHttp.responseText);
}

Метод контроллера:

[HttpPost]
        public IActionResult BuyBook(Models.Order order)
        { .... }

Модели. Класс заказа:

public class Order
    {
        [Required]
        public string BookTitle { get; set; }

        [Range(1,100)]
        public int Quantity { get; set; }
    }

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Попробуйте выполнить следующие действия:

  1. Убедитесь, что подпись класса соответствует отправляемому JSON. Для приведенного выше примера отправляемый JSON будет выглядеть как

    { "BookTitle": title, "Quantity": "value" }
    
  2. Также я вижу, что класс определяет Quantity как int, поэтому используйте parseInt() для преобразования Quantity значение в int. По умолчанию document.getElementById(..).value даст строку.

    let quantity = parseInt(document.getElementById("quantity").value);
    var order = { BookTitle: title, Quantity: quantity };
    
  3. Используйте Content-Type в качестве application/json

  4. Добавить [FromBody] атрибут на model

    BuyBook([FromBody]Models.Order order)
    
  5. Отправьте объект заказа, как показано ниже.
    xmlHttp.send(order);
    
    ИЛИ
    xmlHttp.send(JSON.stringify(order));
    
0 голосов
/ 21 января 2020

Обновите свой метод так:

[HttpPost]
public IActionResult BuyBook([FromBody] Models.Order order)
{ .... }

Более подробную информацию вы можете найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...