2017-01-03 42 views
2

這是谷歌API - Javascript代碼發送JSON對象參數網頁API控制器.netCore

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"; 
    } 

在這種情況下,我得到空值

我無法發送字符串,如果我可以發送該對象,那就更好了。

這可以作爲接收對象

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

enter image description here

+0

變更請求類型AJAX爲「POST」,改變你的方法要接受POST和更改參數類型爲「PlaceDetails」 – Dalton

+0

@Dalton我得到空值,做什麼 –

+0

修改數據:放''data:output'並刪除'[FromBody]' – Dalton

回答

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"; 
} 
+0

感謝您的解決方案。 –

+16

是的很好的答案,但作爲初學者的誇張無論如何都幫助他?它會幫助其他人看到薄薄的侮辱嗎?它真的讓你感覺好點了嗎? –