如果没有传递查询字符串,则使用FromUri的Webapi对象参数为null

时间:2016-06-01 15:41:14

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

我有以下API控制器操作

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

}

当我通过访问网址

与fiddler测试时

http://localhost/assets

searchCriteria参数为null但是当我尝试使用

http://localhost/assets?param1=1&param2=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?

由于

2 个答案:

答案 0 :(得分:3)

嗯...因为没有数据来创建参数实例。

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

http://localhost/assets?param1=1&param2=2

请注意param1param2如何提供值,这些值直接映射到参数的类型:

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();

}