2014-07-16 42 views
1

我正在使用Web API,因爲我對此很陌生,對此我不太瞭解。 我正在嘗試實施搜索,截至目前,我只以文本搜索開始,但稍後可能會有巨大的搜索條件。對於一個簡單的文本來說,web api可以與 原始數據類型一起使用。現在我想創建一個過濾器類,比如頁碼,頁面大小也是所有的搜索條件,所以我創建了一個類。我創建了一個與web api進行通信的MVC應用程序,web api返回了Json數據,然後我將它解序列化爲模型。我堅持使用複雜的對象部分,也就是現在我使用列表來獲取數據,稍後將由數據庫取代。以下是代碼。Web API中的複雜數據獲取

public IEnumerable<Document> Get(PaggingDetails request) //public async Task<IEnumerable<Note>> GetNotes() for Async (DB) 
     { 
      return _repository.GetAll(pagedetails.PageNumber, pagedetails.PageSize, pagedetails.PageFilter); 
      //return await db.Notes.ToListAsync<Note>(); for async 
     } 

public string GetPage(int pagenumber,int pagesize,string pagefilter) 
     { 
      try 
      { 
       PaggingDetails PageDetails = new PaggingDetails(); 
       PageDetails.PageFilter  = pagefilter; 
       PageDetails.PageSize  = pagesize; 
       PageDetails.PageNumber  = pagenumber; 
       return new System.Net.WebClient().DownloadString 
("http://.../api/Document/?pagedetails=" + 
                   PageDetails); 
       //new HttpClient().GetStringAsync("http://localhost:18545/api/Emails"); for async 
       //also pass parameters 

      } 
      catch (Exception ex) 
      { 
      } 
      return ""; 
     } 

回答

-1

通過deafult,您不能使用類作爲GET Web API操作的參數類型。您需要使用單個類型的單個參數。

如果您想使用類作爲參數,則無法阻止您使用POST操作,您可以在其中包含數據而沒有任何問題。

但是,您可以通過使用[FromUri]修飾comples屬性來強制讀取URI操作的複雜參數。

可以讀取這個文件,以更好地瞭解網絡API參數綁定:

Parameter Binding in ASP.NET Web API

默認的Web API使用下列規則綁定參數:

  • 如果參數是一個「簡單」類型,Web API嘗試從URI獲取值。簡單類型包括.NET原始類型(int,bool,double等),加上TimeSpan,DateTime,Guid,decimal和string,以及任何類型的轉換器都可以從字符串轉換。 (稍後關於類型轉換器的更多信息。)

  • 對於複雜類型,Web API嘗試使用媒體類型格式化程序從消息正文讀取值。

這是工作的標準方式。如果使用[FromUri]屬性,則動作選擇器將無法在接收不同複雜類型的不同Get方法中進行選擇。如果您使用帶有控制器和動作段的路由,則不會出現該問題,因爲無論參數是什麼,操作選擇器都會按操作名稱進行選擇。

因爲這個原因,我不喜歡使用[FromUri],並且認爲這不是使用GET操作的自然方式。但是您可以使用它,並採取必要的預防措施。

+0

你能否提供一些代碼 –

相關問題