【问题标题】:Communication between HttpClient.PostAsJsonAsync and MVC controller actionsHttpClient.PostAsJsonAsync 和 MVC 控制器操作之间的通信
【发布时间】: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


【解决方案1】:

PostAsJsonAsync() 将一个对象序列化为 JSON。

您正在向它传递一个字符串(恰好是序列化的 JSON),因此它会将其序列化为 JSON 字符串 ("...")。

您需要将实际对象传递给它。

【讨论】:

    【解决方案2】:

    我相信PostAsJsonAsync 方法接受一个正常类型的值,并且不希望它已经被序列化。

    the MSDN page

    尝试直接传递model 变量。

    【讨论】:

    • 我试过了,但是如果我直接传递模型变量,那么空值就会到达控制器。
    • @Pila77 这听起来像是控制器的问题。您可能需要发布另一个问题以获得有关该问题的帮助。
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2011-09-10
    • 2012-04-27
    • 2014-10-02
    • 1970-01-01
    • 2021-04-15
    相关资源
    最近更新 更多