FromUri似乎无法使用Web API

lsh*_*has 4 .net c# asp.net asp.net-web-api

我正在尝试实现一个搜索过滤器,以在我的一个控制器中获取对象。我有以下代码:

public class SearchFilter
{
    public DateTime? BusinessDate;
    public DateTime? BusinessDateFrom;
    public DateTime? BusinessDateTo;
    public bool? Status;
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

    public SearchFilter get([FromUri] SearchFilter SearchFilter)
    {
        var Results = db.MyTable.Where(t => t.Published == true);
        if (SearchFilter.BusinessDate != null)
        {
            Results = Results.Where(t => t.BusinessDate == SearchFilter.BusinessDate);
        }
        else
        {
            if (SearchFilter.BusinessDateFrom != null && SearchFilter.BusinessDateTo != null)
            {
                Results = Results.Where(t => t.BusinessDate >= SearchFilter.BusinessDateFrom && t.BusinessDate <= SearchFilter.BusinessDateTo);
            }
        }
        if (SearchFilter.Status != null)
        {
            Results = Results.Where(t => t.Approved == SearchFilter.Status);
        }

        return SearchFilter;
    }
Run Code Online (Sandbox Code Playgroud)

我现在返回SearchFilter只是为了查看它是否有效,因为过滤不起作用。

原因如下:

要求:http://localhost:11513/api/MyController/?BusinessDateFrom=2015-09-10&BusinessDateTo=2015-09-12&BusinessDate=09/09/2015&Status=true 结果:

{
  "BusinessDate": null,
  "BusinessDateFrom": null,
  "BusinessDateTo": null,
  "Status": null
}
Run Code Online (Sandbox Code Playgroud)

谁能解释我在做什么错,因为根据此链接,它应该很简单:

http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

lsh*_*has 5

我意识到了问题所在。

问题是在SearchFilter类,它是缺乏getset为每个属性。

public class SearchFilter
{
    public DateTime? BusinessDate { get; set; }
    public DateTime? BusinessDateFrom { get; set; }
    public DateTime? BusinessDateTo { get; set; }
    public bool? Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这使它像魅力一样工作。