我正在尝试在GET请求中传递复杂的对象。 C#模型对象如下所示:
@SpringBootTest
@ExtendWith(SpringExtension.class)
class ConverterContextTest {
@Autowired
private final ConverterContext converterContext;
@Autowired
private final ConverterRegisterUserDto created;
@Autowired
ConverterContextTest(ConverterContext converterContext, ConverterRegisterUserDto created) {
this.converterContext = converterContext;
this.created = created;
}
@Test
void converterContextGivesCorrectConverter(){
ConverterRegisterUserDto returned = converterContext.getConverter(ConverterRegisterUserDto.class);
assertEquals(returned, created);
}
@Test
void converterContextGivesIncorrectConverter(){
ConverterShowUserDto returned = converterContext.getConverter(ConverterShowUserDto.class);
assertNotEquals(returned, created);
}
}
在Chrome浏览器中,我在“查询字符串参数”下看到以下内容:
public class GetRequest
{
public string ID { get; set; }
public List<string> RequestedFields { get; set; }
public Dictionary<string, List<string>> RequestedGrids { get; set; }
}
我希望这样的请求可以正确反序列化为以下操作中的参数:
ID: 1
RequestedFields[]: someTxtField
RequestedFields[]: someOtherField
RequestedGrids[someGrid][]: keyColumn
RequestedGrids[someGrid][]: someDataColumn
但是,每当请求进入此操作时,该参数的RequestedGrids属性始终计数为0,而其他属性则填充良好。有办法使这项工作吗?
添加
进入JQuery $ .get调用的对象如下所示:
[HttpGet]
[ActionName("get")]
public Dictionary<string,object> GetStuff([FromUri] GetRequest get_req)
其中RequestedFields是纯字符串数组,而RequestedGrids是纯对象,其中每个对象属性值都是字符串数组。
答案 0 :(得分:0)
当您需要发送大量数据(尤其是复杂数据)时,最好将数据作为POST请求正文的一部分发送。这样,您可以确保结构完全匹配,并且可以轻松地与JSON格式进行转换。
答案 1 :(得分:0)
输入在GET上是什么样的?字典类型通常很难进行反序列化-有关详细信息,请参见Deserialize JSON string to Dictionary<string,object> ...
答案 2 :(得分:0)
最简单的方法似乎是传递一个JSON查询字符串而不是使用自动绑定。所以动作看起来像这样:
[HttpGet]
[ActionName("get")]
public Dictionary<string, object> GetStuff(string get_str)
{
var get_req = JsonConvert.DeserializeObject<GetRequest>(get_str);
//Do ur stuff
}
JS看起来像这样:
$.get('<action path>', { get_str: JSON.stringify(get_obj) }, ...