这是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; }
}
答案 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";
}