从显示的查询参数名称中删除嵌套复杂类型的 属性 名称,仅显示子基元 属性 名称

Remove nested complex-type's property name from displayed query parameter name, only show child primitive property names

我的控制器包含此代码:

[HttpGet]
public IActionResult GetNewQuestLocation([FromQuery]UserLocationPreferences userLocationPrefs)
{
    //code here
}

这里是用作参数的模型:

public record UserLocationPreferences(Location UserLoc, UserSettingsDto UserSettings);

及其子参数:

public record Location(double Latitude, double Longitude);
public record UserSettingsDto(double MaxDistance, double MinDistance);

问题

我在创建 API 方面的经验很少,而且我遇到了 运行 一个问题,其中一个复杂类型在另一个复杂类型中显示该复杂类型的 属性 名称查询的参数名称。
例如,在 Swagger 上,上面的端点是这样的:

及其完整的 URL 如下所示:

https://exampleAPI.com/api/quest?UserLoc.Latitude=53.74&UserLoc.Longitude=-2.498&UserPrefs.MaxDistance=1.0&UserPrefs.MinDistance=0.5

我希望通过别名化参数的方式删除此端点中的 UserLocUserSettings,这样它就不会包含复杂类型的 属性 名称,仅包含原始类型类型内:

UserLoc.Latitude -> Latitude

UserSettings.MinDistance -> MinDistance 等等

我认为这与模型绑定有关,但我是新手,我还没有找到解决此类情况的在线资源。
如果这是个坏主意,请告诉我原因。我这样做的原因是因为我发现查询有点长,如果后面的多个嵌套类型会显着扩展查询大小,那将是一个问题。我的想法是为这些参数设置别名以便于使用。

提前致谢!

这是使用模型 class 而不是记录的解决方法:

public class Location
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}
public class UserSettingsDto
{
    public double MaxDistance { get; set; }
    public double MinDistance { get; set; }
}

控制器:

    [Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [HttpGet]
    public IActionResult GetNewQuestLocation([FromQuery] Location UserLoc, [FromQuery] UserSettingsDto UserSettings)
    {
        return Ok();
    }
}

结果:

My thought was to alias these parameters for ease of use.

如果一定要使用record,可以像下面这样修改参数名来减少查询字符串的长度:

public record UserLocationPreferences(Location l,  UserSettingsDto u);

结果: