繁体   English   中英

FromUri似乎不适用于Web API

[英]FromUri does not seem to work Web API

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

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只是为了查看它是否正常工作,因为过滤无效。

原因如下:

请求: 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
}

任何人都可以解释我做错了什么,因为根据这个链接它应该是非常直接的:

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

我意识到问题是什么。

问题出在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; }
}

这使它像魅力一样工作。

这是一个非常古老的问题,但我只是遇到了类似的问题,其中只有我的模型的一个属性被绑定,尽管名称是正确的并且它们都是字符串。

事实证明,我的模特有私人制定者,唯一一个工作的是有公共场所的房产。

所以这是另一件需要检查的事情。 这个:

public class Model
{
    public string FirstProperty { get; set; }
    public string SecondProperty { get; private set; }
}

将仅绑定FirstPropertySecondProperty将为null

对于情况下,我不得不私人setter方法,因为该类刚刚结束了做模特。 一开始它只是一系列引入参数对象重构的结果,并且是由ReSharper自动创建的,它只将公共setter提供给那些在代码中实际写入的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM