C# 如果未传递querystring,则具有FromUri的Webapi对象参数为null

C# 如果未传递querystring,则具有FromUri的Webapi对象参数为null,c#,asp.net-web-api2,C#,Asp.net Web Api2,我有以下API控制器操作 [HttpGet] [Route("assets")] public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria) { } 我的方法有什么问题?没有传递querystring时,为什么操作参数为null 谢谢那么。。。因为不存在用于创建参数实例的数据 看看网址。这里有用于创建参数的值: http://localhost/assets?param1=1

我有以下API控制器操作

[HttpGet]
[Route("assets")]
public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria)
{

}
我的方法有什么问题?没有传递querystring时,为什么操作参数为null


谢谢

那么。。。因为不存在用于创建参数实例的数据

看看网址。这里有用于创建参数的值:

http://localhost/assets?param1=1&param2=2
public string Param1 { get; set; }
public string Param2 { get; set; }
注意
param1
param2
是如何提供值的,这些值直接映射到参数的类型:

http://localhost/assets?param1=1&param2=2
public string Param1 { get; set; }
public string Param2 { get; set; }
但在此URL中,没有任何值:

http://localhost/assets
因此,没有任何东西可用于创建方法参数的实例


null
字面意思是“这里什么都没有”。由于未提供任何参数值,因此没有任何内容。

如果您认为搜索条件为空,但希望避免单元测试错误,请重试

[HttpGet]
[Route("assets")]
public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria)
{

if(searchCriteria == null)
    searchCriteria = new SearchCriteria();

}
[HttpGet]
[路线(“资产”)]
公共异步任务获取([FromUri]SearchCriteria SearchCriteria)
{
if(searchCriteria==null)
searchCriteria=新的searchCriteria();
}

但是,我在对象中有一些默认值。所以我想使用默认值。我已经更新了我的查询。@mukildephthi:为了在这种情况下实现自定义行为,您可能需要为您的
SearchCriteria
类型创建一个自定义模型绑定器。网上有很多例子,而且有多种方法可以使用它。(您可以在应用程序中全局使用它,或者仅用于此操作方法)我可以获得一些示例吗