Базовый словарь .NET не использует параметр запроса post

#c# #asp.net-core #.net-core

#c# #asp.net-core #.net-core

Вопрос:

Я недавно перешел на .NET Core из .NET Framework,

Параметры моего контроллера обычно содержат словарь<строка, объект> для обработки запроса полезной нагрузки, который находится в формате JSON.

 public JsonResult RegisterUser(Dictionary<string, object> reqInfo)
  

Однако при попытке этого на .NET Core словарь всегда равен нулю, хотя в моей полезной нагрузке запроса есть значения.

Комментарии:

1. Здесь нам нужна дополнительная информация. У вас есть еще код, которым вы можете поделиться, в частности, какие-либо атрибуты метода запроса в registerUser? Вы подтвердили, что этот метод выполняется и получает null для reqInfo или конечная точка вообще не попадает?

2. JSON — это текст, поэтому Dictionary<string,object> не поможет. Кроме того, что произойдет, если строка содержит массив ? Вам не нужен словарь для обработки JSON в первую очередь. Вы можете использовать строго типизированный объект. Вот как все ASP.NET Основные проекты, все документы и руководства работают. Даже если вы хотите обрабатывать произвольные полезные нагрузки JSON одним действием, лучше использовать dynamic вместо Dictionary .

3. Пожалуйста, опубликуйте текст в формате JSON. Вполне возможно, что запрос содержит массив JSON, а не словарь.

Ответ №1:

Возможно, вам потребуется указать атрибут источника полезной нагрузки.

Согласно документам Microsoft, полезная нагрузка проверяется на наличие потенциальных источников, но «только для простых типов».

Поэтому, если вашим источником полезной нагрузки является тело, попробуйте использовать следующий код:

 public JsonResult RegisterUser([FromBody] Dictionary<string, object> reqInfo)
  

Источник: https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#sources

Комментарии:

1. И даже это приведет к сбою, если тело содержит массив.

2. Я пробовал этот, но он отображается в виде строкового массива.

3. Будет ли способ передать многомерный массив?