我有一个json字符串(javascript数组的json表示(,我想将其传递给C#控制器方法。但是,我要么将 c# 方法参数视为 null,要么未命中断点。
这是 js 代码:
$.ajax({
url: "/Home/PersistSelections",
type: 'post',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: { "json": JSON.stringify(selectedItems) }
})
其中"seleteditems"只是一个javascript组合。
我的 c# 代码是:
[HttpPost]
public void PersistSelections([FromBody] string json)
{
}
但是,这可能不是正确的方法?我总是看到 json 参数为空。
任何提示表示赞赏!
更好的方法是利用模型绑定,而不是尝试自己发布和解析 JSON。
创建要发送的物料的模型
public class ItemModel {
//...include the desired properties
public string Description { get; set; }
public string Name { get; set; }
public decimal TotalPrice { get; set; }
//...
}
接下来更新操作以期望项目
[HttpPost]
public IActionResult PersistSelections([FromBody] ItemModel[] items) {
//access posted items
}
最后更新客户端以发布 JSON 数据
$.ajax({
url: "/Home/PersistSelections",
type: 'post',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify(selectedItems)
})
框架的内置模型绑定器应解析和绑定已发布的 JSON,并在控制器中填充对象
由于您使用contentType作为应用程序/json,这就是默认模型绑定器不起作用的原因。 如果要解决问题,请创建一个类 让我们说模型
Public Class MyModel{
Public string Json {get;set;}
}
在控制器使用中
[HttpPost]
public void PersistSelections(MyModel model)
{
}