В моем веб-API есть 2 метода, которые оба используют HttpPost и оба передают один и тот же объект в объекте - SearchCriteria
[HttpPost]
[ActionName("GetBySearchCriteria")]
public async Task<IActionResult> GetBySearchCriteriaAsync([FromBody] SearchCriteria searchCriteria)
{
var data = JsonConvert.SerializeObject(searchCriteria);
var result = await PostAsync("GetBySearchCriteria", data).ConfigureAwait(false);
return result;
}
Этот метод отлично работает и возвращает массив объектов
[{
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}, {
"property1": null,
"property2": null,
"property3": "Property 3 Value"
}
]
В моем Delphi-клиенте это будет отлично разбираться в массив
Теперь у меня есть второй метод с такой же сигнатурой
[HttpPost]
[ActionName("GetItemsForSearchCriteria")]
public async Task<IActionResult> GetItemsForSearchCriteriaAsync([FromBody] SearchCriteria searchCriteria)
{
var data = JsonConvert.SerializeObject(searchCriteria);
var result = await PostAsync("GetItemsForSearchCriteria", data).ConfigureAwait(false);
return new JsonResult(result);
}
Ответ на этот раз бесполезен, так как егообернутый внутри другого объекта
{
"value": "[{\"property1\":\"acd84fe8-918f-11e8-9c80-02e80462a44f\",\"property2\":\"acd84fe8-918f-11e8-9c80-02e80462a44f\",\"property3\":\"property3value\"}]",
"formatters": [],
"contentTypes": [],
"declaredType": null,
"statusCode": 200
}
Объект, передаваемый обратно во втором методе, является более сложным, но я намеренно добавил JsonIgnore в свойства, чтобы посмотреть, вызывает ли это проблему, и не вызывает ли это
Кто-нибудь знает, почему это не возвращается в том же формате, что и первый метод?
Я не вижу никакой разницы между способом вызова этих методов
Я не хочу, чтобы вызывающая сторона виделакод ответа и т. д.
Я все это проверил с помощью почтальона, поэтому знаю, что проблема не в клиентской стороне
Не может быть ничего плохого в моем методе PostAsync, так как метод 1 также вызывает его, и там все в порядке
Пол