我有以下API控制器操作
[HttpGet]
[Route("assets")]
public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria)
{
}
当我通过访问网址
与fiddler测试时searchCriteria参数为null但是当我尝试使用
时http://localhost/assets?param1=1¶m2=2然后searchCriteria获得了该对象的实例。
SearchCriteria类定义为
public class SearchCriteria
{
public SearchCriteria()
{
Param1 = "";
Param2 = "";
PageIndex = 0;
PageSize = 10;
}
public string Param1 { get; set; }
public string Param2 { get; set; }
public int PageIndex{ get; set; }
public int PageSize { get; set; }
}
我的做法有什么问题?为什么在没有传递查询字符串时action参数为null?
由于
答案 0 :(得分:3)
嗯...因为没有数据来创建参数实例。
查看网址。这里有创建参数的值:
http://localhost/assets?param1=1¶m2=2
请注意param1
和param2
如何提供值,这些值直接映射到参数的类型:
public string Param1 { get; set; }
public string Param2 { get; set; }
但在此网址中,没有值:
http://localhost/assets
因此没有什么可用于创建方法参数的实例。
null
字面意思是“这里没有任何东西”。由于没有提供参数值,因此没有任何参数值。
答案 1 :(得分:0)
如果您对搜索条件没有问题,但是想要避免单元测试错误,请尝试
[HttpGet]
[Route("assets")]
public async Task<HttpResponseMessage> Get([FromUri]SearchCriteria searchCriteria)
{
if(searchCriteria == null)
searchCriteria = new SearchCriteria();
}