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

I am trying to implement a search-filter for getting objects in one of my controllers. I have the following code:

public class SearchFilter { public DateTime? BusinessDate; public DateTime? BusinessDateFrom; public DateTime? BusinessDateTo; public bool? Status; }

And this is my Controller:

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

I am now returning SearchFilter just to see if it is working, because the filtering was not working.

Here is why:

Request to: http://localhost:11513/api/MyController/?BusinessDateFrom=2015-09-10&BusinessDateTo=2015-09-12&BusinessDate=09/09/2015&Status=true results in:

{ "BusinessDate": null, "BusinessDateFrom": null, "BusinessDateTo": null, "Status": null }

Can anyone explain what I am doing wrong, because according to this link it should be pretty straight forward:

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

这使它像魅力一样工作。

I realized what the problem was.

The problem was in the SearchFilter class, it was lacking get and set for each property.

public class SearchFilter { public DateTime? BusinessDate { get; set; } public DateTime? BusinessDateFrom { get; set; } public DateTime? BusinessDateTo { get; set; } public bool? Status { get; set; } }

This made it work like a charm.

更多推荐