繁体   English   中英

为什么对 ASP.NET 控制器操作的 Javascript POST 请求获取 NULL 参数?

[英]Why Javascript POST Request to ASP.NET controller action getting NULL parameter?

当我从 JavaScript 文件发送XmlHttpRequets时,我的 ASP .NET 控制器方法的参数保持为空。 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)
        { .... }

Models.Order 类:

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

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

像这样更新你的方法:

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

你可以在这里找到更多信息

尝试以下几点:

  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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM