C# FromUri似乎不适用于Web API
我正在尝试实现一个搜索过滤器,以便在我的一个控制器中获取对象。 我有以下代码:C# FromUri似乎不适用于Web API,c#,asp.net,.net,asp.net-web-api,C#,Asp.net,.net,Asp.net Web Api,我正在尝试实现一个搜索过滤器,以便在我的一个控制器中获取对象。 我有以下代码: public class SearchFilter { public DateTime? BusinessDate; public DateTime? BusinessDateFrom; public DateTime? BusinessDateTo; public bool? Status; } 这是我的控制器: public SearchFilter get([FromU
public class SearchFilter
{
public DateTime? BusinessDate;
public DateTime? BusinessDateFrom;
public DateTime? BusinessDateTo;
public bool? Status;
}
这是我的控制器:
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;
}
谁能解释一下我做错了什么,因为根据这个链接,这应该是非常直截了当的:
我意识到了问题所在 问题出在SearchFilter类中,它缺少每个属性的
get
和set
public class SearchFilter
{
public DateTime? BusinessDate { get; set; }
public DateTime? BusinessDateFrom { get; set; }
public DateTime? BusinessDateTo { get; set; }
public bool? Status { get; set; }
}
这使它工作起来很有魅力。这是一个非常古老的问题,但我刚刚遇到了一个类似的问题,即我的模型只有一个属性被绑定,尽管名称正确,并且都是字符串 结果证明,我的模型有私有setter,唯一起作用的是具有公共setter的属性 所以这是另一件需要检查的事情。这:
public class Model
{
public string FirstProperty { get; set; }
public string SecondProperty { get; private set; }
}
将仅绑定FirstProperty
,而SecondProperty
将为null
在上下文中,我使用了私有setter,因为这个类最终只是一个模型。起初,它只是一系列引入参数对象类重构的结果,是由ReSharper自动创建的,它只为那些在代码后面实际写入的属性提供公共setter。我刚刚发现了这一点,这就是问题所在-不幸的是,我没有拥有该对象,所以我必须用getter/setter创建一个DTO,并使用automapper。
public class Model
{
public string FirstProperty { get; set; }
public string SecondProperty { get; private set; }
}