c# - Web Api 2 - 填充复杂查询字符串参数的默认值

标签 c# asp.net asp.net-web-api2

我正在使用 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/

相关文章:

c# - 如何在 ASP.NET WebAPI 中返回文件 (FileContentResult)

c# - 异步 Web 服务调用不一致异步

c# - 使用FilterAttributes的Web API异常处理

c# - C/C++/C# 设置窗口位置 : Window on top of others

c# - ASP.NET MVC3 VPS 托管 : Windows 2008 32bit or Windows 2008 R2?

asp.net - 服务器上的 Web 应用程序不读取样式表

c# - Razor View 中的简写 If without else (ASP.NET MVC4)

c# - 使用 distance() 方法进行空间 Linq 查询

c# - Java Socket 与 C# TcpClient

c# - 在 Excel 中可视化 map 数据