2015-11-10 110 views
1

我想實現一個搜索過濾器來獲取我的控制器之一中的對象。 我有以下代碼:FromUri似乎沒有工作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

回答

3

我意識到問題所在。

問題在於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; } 
} 

這使得它像魅力一樣工作。

+0

我剛剛發現這個問題 - 不幸的是我沒有擁有這個對象,所以我必須使用getters/setters創建一個DTO並使用automapper。 –