【发布时间】:2017-10-26 16:02:33
【问题描述】:
我有一个 C# 控制器,它应该对另一个发送简单对象(模型)的遥控器进行异步调用:
HttpClient clientHTTP = new HttpClient();
myModel model = new myModel();
model.Id = 100;
model.data = "this is data";
var json = Newtonsoft.Json.JsonConvert.SerializeObject(model);
clientHTTP.BaseAddress = new Uri("http://REMOTE_IP/");
clientHTTP.PostAsJsonAsync("/WebcastNotify/Heat", json)
.ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
遥控器:
public class WebcastNotifyController : Controller
{
public ActionResult Heat(myModel model)
{
// allways recieve model.Id = 0 and model.data = null
}
}
还有简单的模型:
public class modeloWebCast
{
public int Id { get; set; }
public string data { get; set; }
}
为什么我在遥控器上总是得到空对象(model.id = 0,model.data=null)
就像人们建议的那样,如果我直接传递模型变量,我会在控制器中收到空对象(不是像以前那样具有空属性的对象)。
我尝试用一个简单的html页面来测试:
function Send()
{
var Url = "@Url.Action("Heat", "WebcastNotify")";
$.ajax(
{
type: "post",
url: Url,
ajaxasync: true,
data: {modelo:{ Id: 100, data: "this is the data"}},
success: function (result) {
$("#CapaInfo").html(result);
}
})
}
通过这段代码,对象被完美地发送到控制器。
我做错了什么?
【问题讨论】:
-
如果我直接传递对象而不序列化它们,控制器会收到一个空对象
-
我建议您首先尝试直接从任何 http 请求生成器(如 postman)调用控制器。如果您无法让控制器从正确的请求中获取对象,那么问题出在控制器上,您应该先解决这个问题。不过,我同意其他 2 个答案,您应该将模型直接传递给“PostAsJsonAsync”。
-
我尝试了一个简单的 tml - js 页面: var UrlDestino = "@Url.Action("Heat", "WebcastNotify")"; $.ajax( { type: "post", url: UrlDestino, ajaxasync: true, data: {modelo:{ Id: 100, modelo: "this is data"}}, success: function (result) { $("# CapaInfo").html(result); } }) 一切顺利。
标签: c# json asp.net-mvc controller