我目前有一个标准类,其中包含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)替换控制器,它就可以了。但对于复杂类型,它不是自动填充的。
由于
答案 0 :(得分:3)
试试这个:
public Task<HttpResponseMessage> GetItems([FromUri]RangeProperties rangeProperties)
默认情况下,Web Api会在请求的查询字符串中读取简单类型,并在请求的正文中读取复杂类型。在您的情况下,您尝试在查询字符串中传递复杂类型的值,因此您必须使用RangeProperties
强制web api从查询字符串中获取FromUriAttribute
值。
相反的属性是FromBodyAttribute
,以防你在帖子请求的正文中有一个int或string值。