Как отправить данные в методе Angular 8 Http get в классе обслуживания, когда бэкэнд принимает словарь

У меня есть бэкэнд-метод C# HttpGet, который принимает такой словарь в качестве параметров запроса.

public async Task<IActionResult> Search([BindRequired, FromQuery] IDictionary<string, object> pairs)

Мой интерфейс находится в Angular 8. Что я должен передать в методе get класса службы Angular, когда серверная часть принимает такой словарь? Это строка запроса или что?

в настоящее время я передаю строку запроса, подобную этой,

search(parameters: any): Observable<any> {

var queryString = Object.keys(parameters).map(key => key + '=' + parameters[key]).join('&');

return this.httpClient.get(environment.host + environment.search + queryString);

}

Но это не работает. когда я отлаживаю и вижу, значения параметров запроса бэкэнда равны нулю, хотя я передал значения из внешнего интерфейса.

Спасибо!


person kalpi    schedule 30.06.2021    source источник


Ответы (1)


Это действительно работает так, как ожидалось. Как вы ожидаете, что ваше приложение будет десериализовать строку в базовый класс? Что вы ожидаете?

Привязка модели по умолчанию работает так, что она итерирует поля целевого класса и пытается найти соответствующие поля из сериализованных данных.

object не содержит полей, поэтому десериализация в него не имеет смысла.

Если у вас есть сложная логика, в которой вы ожидаете, что неизвестные данные будут десериализованы в ваши классы, вы можете предоставить пользовательское связывание модели. Пример использования отражения довольно подробно описан в этом ответе SO.

Но обычно лучше всего просто ожидать нединамических типов данных в вашем API, даже если тип будет довольно общим.

person TotallyNewb    schedule 30.06.2021