繁体   English   中英

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

[英]Webapi object parameter with FromUri is null if no querystring passed

我有以下API控制器操作

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

}

当我通过访问URL与提琴手测试时

HTTP://本地主机/资产

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?

谢谢

好吧,因为没有数据可以创建参数实例。

查看网址。 在这里,您具有用于创建参数的值:

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

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

public string Param1 { get; set; }
public string Param2 { get; set; }

但是在此URL中,没有值:

http://localhost/assets

因此,没有什么可用于创建method参数的实例。

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

如果您可以使用搜索条件为空但可以避免单元测试错误,请尝试

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

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM