C# ASP.NET核心:从URL解析复杂结构

C# ASP.NET核心:从URL解析复杂结构,c#,.net-core,C#,.net Core,我已获得API方法: [HttpGet] public List<TripDto> Get([FromQuery]RequestDto req) { // some logic here } 在我的req变量中,我只看到会话参数。如何从GET请求解析复杂的列表结构?1)您不需要在仅用于解析的类中初始化属性 public class RequestDto { public List<SegmentDto> Segments { get; set; }

我已获得API方法:

[HttpGet]
public List<TripDto> Get([FromQuery]RequestDto req)
{
    // some logic here
}
在我的
req
变量中,我只看到会话参数。如何从GET请求解析复杂的列表结构?

1)您不需要在仅用于解析的类中初始化属性

public class RequestDto
{
    public List<SegmentDto> Segments { get; set; }
    public string SessionId { get; set; } 
}

第一个选择,不要。使用POST代替。否则,编写一个自定义格式化程序,它可以从查询字符串中反序列化您的特定类型。我猜默认的方法是为每个键创建一个新对象。@TanveerBadar但是如果我创建restapi,我的方法必须是GET?因为POST用于创建数据。不是吗?这就是在现实生活中,遵守休息原则的地方。有些东西不太符合其他模式。您可以按照Tanveer的建议,创建一个自定义格式化程序来处理查询字符串模式,也可以稍微偏离正常的REST,使用POST请求来完成此任务。@mason什么是自定义格式化程序?你有例子的链接吗?谢谢,我看到很多人真的很难坚持休息,尽管事实上,如果你偶尔偏离正常模式,没有什么不好的事情发生。在这种情况下,我们称之为HTTP API,继续我们的生活。决定是否值得实现自定义代码来处理您想要的绑定查询字符串,或者是否可以接受偏离典型REST原则。感谢您的回答,它正在工作。您有关于此功能的文档链接吗?不客气。没有,我在上面找不到任何东西。
http://localhost:5000/trips?Segments[0][Departure]=SIP&Segments[0][Arrival]=MOW&Segments[1][Departure]=MOW&Segments[1][Arrival]=SIP&SessionId=s1
public class RequestDto
{
    public List<SegmentDto> Segments { get; set; }
    public string SessionId { get; set; } 
}
?segments[0].departure=SIP&segments[0].arrival=MOW&...