jkr*_*r01 6 c# asp.net asp.net-web-api2
我正在使用 ASP.Net Web API 2 构建 REST API。我有一个 GET 端点,它接受查询字符串中的复杂对象。
public async Task<IHttpActionResult> GetAsync([FromUri]SpendingAccountSearchParams spendingAccountSearchParams) {...}
Run Code Online (Sandbox Code Playgroud)
搜索对象有很多属性,这些属性要么可以为空,要么在对象的构造函数中填充默认值。例如:
public SpendingAccountSearchParams()
{
AsOfDate = DateTime.Now;
Skip = 0;
Top = 20;
}
Run Code Online (Sandbox Code Playgroud)
如果我在查询字符串中传递至少 1 个参数,则我的 SpendingAccountSearchParams 对象将填充到控制器中,并且所有默认值都会正确设置。
但是,如果我不传递任何值,那么我的 SpendingAccountSearchParams 对象在构造函数中为 null。
如果没有传递查询字符串参数,如何自动强制所有属性获取默认值?
我想要与此等效的内容,但显然它无效并且不起作用:
public async Task<IHttpActionResult> GetAsync([FromUri]SpendingAccountSearchParams? spendingAccountSearchParams = new SpendingAccountSearchParams()) {...}
Run Code Online (Sandbox Code Playgroud)
我知道在控制器中我可以检查 null 并创建一个新对象(如果它不存在),但这只是一个端点的一个示例。最终,我将拥有许多具有不同搜索参数的端点,并且我希望所有端点都能自动发生。
任何帮助,将不胜感激。
谢谢!
小智 5
由于某种原因,如果您使用 getter/setter 而不是属性,它可以开箱即用。
public SpendingAccountSearchParams()
{
DateTime AsOfDate { get; set; } = DateTime.Now;
int Skip { get; set; } = 0;
int Top { get; set; } = 20;
}
Run Code Online (Sandbox Code Playgroud)
你可以试试这个代码
public async Task<IHttpActionResult> GetAsync([FromUri]SpendingAccountSearchParams spendingAccountSearchParams){
if(spendingAccountSearchParams==null)
{
spendingAccountSearchParams.AsOfDate=DateTime.Now;
spendingAccountSearchParams.Skip=0;
spendingAccountSearchParams.Top=20;
}
else
{
// your code
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |