FromUri似乎不起作用Web API

本文关键字:Web API 不起作用 FromUri | 更新日期: 2023-09-27 18:21:24

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

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

FromUri似乎不起作用Web API

我意识到问题是什么。

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

这使它像一个魅力一样工作。

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

原来我的模特有私人二传手,唯一有效的是有公共房产的房产。

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

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

只会绑定FirstPropertySecondProperty会被null

对于上下文,我有私人二传手,因为这个类最终只是一个模型。一开始,它只是一系列引入参数对象重构的结果,由 ReSharper 自动创建,它只为代码后面实际写入的那些属性提供公共资源库。