我正在使用 ASP.Net Web API 2 构建 REST API。我有一个 GET 端点,它接受来自查询字符串的复杂对象。
public async Task<IHttpActionResult> GetAsync([FromUri]SpendingAccountSearchParams spendingAccountSearchParams) {...}
搜索对象有很多属性,这些属性要么可以为空,要么在对象的构造函数中填充了默认值。例如:
public SpendingAccountSearchParams()
{
AsOfDate = DateTime.Now;
Skip = 0;
Top = 20;
}
如果我在查询字符串中至少传递了 1 个参数,那么我的 SpendingAccountSearchParams 对象将填充到 Controller 中,并且所有默认值都已正确设置。
但是,如果我不传递任何值,那么我的 SpendingAccountSearchParams 对象在构造函数中为 null。
如果没有传递查询字符串参数,我如何自动强制所有属性获取它们的默认值?
我想要这个的等价物,但显然它无效且不起作用:
public async Task<IHttpActionResult> GetAsync([FromUri]SpendingAccountSearchParams? spendingAccountSearchParams = new SpendingAccountSearchParams()) {...}
我知道在 Controller 中我可以检查 null 并创建一个新对象(如果它不存在),但这只是一个端点的一个示例。最终,我将拥有许多端点,它们都具有不同的搜索参数,我希望所有这些端点都自动发生。
如有任何帮助,我们将不胜感激。
谢谢!
最佳答案
出于某种原因,如果您使用 getter/setter 而不是属性,它会开箱即用。
public SpendingAccountSearchParams()
{
DateTime AsOfDate { get; set; } = DateTime.Now;
int Skip { get; set; } = 0;
int Top { get; set; } = 20;
}
关于c# - Web Api 2 - 填充复杂查询字符串参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104586/