Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FromUri似乎不适用于Web API_C#_Asp.net_.net_Asp.net Web Api - Fatal编程技术网

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; }
}