将Json对象参数发送到.netCore中的Web Api控制器

时间:2017-01-03 09:47:25

标签: json ajax string asp.net-web-api asp.net-core

这是Google API - Javascript代码

var output = new Object();
output.PlaceID = place.place_id;
output.Longitude = place.geometry.location.lng();
output.Latitude = place.geometry.location.lat();

$.ajax({
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    url: 'api/StorePlaces/Get',
    type: 'POST',
    data: { "value":output },
    success: function (result) {
        // Do something with the result
    }
});

如何在控制器处接收

    // GET api/values/5
    [HttpPost("{PlaceDetails}")]
    public string Get(PlaceDetails value)
    {
        return "value";
    }

在这种情况下,我得到空值

我无法发送字符串,如果我可以发送Object,那就更好了。

这可以用作接收对象

public class PlaceDetails
{
    public string PlaceID { get; set; }
    public string Longitude { get; set; }
    public string Latitude { get; set; }
}

enter image description here

1 个答案:

答案 0 :(得分:7)

你的代码有多少问题,可能先咨询一些初学者教程?

首先,您必须查看您发送的对象,这非常明显!

您正在发送

{
    "value" : {
        "PlaceID" : "",
        "Longitude " : "",
        "Latitude " : ""
    }
}

预期答案在哪里

{
    "PlaceID" : "",
    "Longitude " : "",
    "Latitude " : ""
}

所以你必须在JavaScript中使用它:

$.ajax({
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    url: 'api/StorePlaces/Get',
    type: 'POST',
    // do not wrap it in object with value property here!!!!
    data: JSON.stringify(output),
    success: function (result) {
        // Do something with the result
    }
});

其次,您的控制器操作(当它发布请求时,为什么它被称为Get?)... [HttPost("{PlaceDetails}")]属性是完全错误的。

这将在路线中期望PlaceDetails参数。你不是这样的!只需删除它。此外,缺少[FromBody]属性以告知它从http请求正文中反序列化模型

[HttpPost]
public string Get([FromBody]PlaceDetails value)
{
    return "value";
}