2014-07-16 44 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

你能否提供一些代码 –

相关问题