Asp.Net Web Api:控制器上的参数为null,未填充模型

时间:2013-10-22 16:16:48

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api

我目前有一个标准类,其中包含1个属性

public class RangeProperties
{
    public string ItemNumber { get; set; }
}

这是作为参数输入到控制器上的,如此

    public Task<HttpResponseMessage> GetItems(RangeProperties rangeProperties)

我在控制器中设置了一个断点,所以我可以看到它进入但是rangeProperties总是为空。

我正在调用控制器

   http://localhost:8383/api/GetItems?ItemNumber=test

我尝试将ItemNumber更新为int和int?依然没有。我也尝试了不同的案例。

我原以为rangeProperties不会为null。

我希望有rangeProperties来保存许多属性,然后这些属性将从查询字符串填充,如果我没有发送内容,那么内部的属性将为null。

但目前它甚至没有使用1个属性。

有人知道我做错了吗?

虽然我正在使用asp.net web api,但我相信这也与asp.net mvc类似。

值得注意的是,如果我用(string itemNumber)替换控制器,它就可以了。但对于复杂类型,它不是自动填充的。

由于

1 个答案:

答案 0 :(得分:3)

试试这个:

public Task<HttpResponseMessage> GetItems([FromUri]RangeProperties rangeProperties)

默认情况下,Web Api会在请求的查询字符串中读取简单类型,并在请求的正文中读取复杂类型。在您的情况下,您尝试在查询字符串中传递复杂类型的值,因此您必须使用RangeProperties强制web api从查询字符串中获取FromUriAttribute值。

相反的属性是FromBodyAttribute,以防你在帖子请求的正文中有一个int或string值。