2017-01-03 3 views
2

Это Google API - Javascript кодОтправить параметр объекта JSON в контроллер Web 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

изменить тип запроса в Аякса «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

Да, хороший ответ, но разве гипербола о том, чтобы быть новичком, помогает ему в любом случае? Помогло ли это другим людям увидеть завуалированные оскорбления? Вы действительно чувствуете себя лучше? –

Смежные вопросы