Asp.net Get中的Web API复杂数据
我正在使用WebAPI,因为我对它还不熟悉,所以我对它不太了解。 我正在尝试实现搜索,现在我只开始文本搜索,但以后可能会有巨大的搜索条件。对于一个简单的文本,web api可以很好地与 基本数据类型。现在我想创建一个过滤器类,比如pagenumber、pagesize以及所有搜索条件,所以我创建了一个类。我创建了一个与web api通信的MVC应用程序,web api返回Json数据,然后将其反序列化到模型。我一直在处理复杂的对象部分,现在我正在使用一个列表来获取数据,稍后它将被数据库所取代。下面是代码Asp.net Get中的Web API复杂数据,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我正在使用WebAPI,因为我对它还不熟悉,所以我对它不太了解。 我正在尝试实现搜索,现在我只开始文本搜索,但以后可能会有巨大的搜索条件。对于一个简单的文本,web api可以很好地与 基本数据类型。现在我想创建一个过滤器类,比如pagenumber、pagesize以及所有搜索条件,所以我创建了一个类。我创建了一个与web api通信的MVC应用程序,web api返回Json数据,然后将其反序列化到模型。我一直在处理复杂的对象部分,现在我正在使用一个列表来获取数据,稍后它将被数据库所取代。下
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 "";
}
根据deafult,您不能使用类作为GetWebAPI操作的参数类型。您需要使用单个类型的单个参数 如果您想使用类作为参数,没有什么可以阻止您使用POST操作,在该操作中您可以毫无问题地包含数据 但是,可以通过使用[FromUri]修饰comples属性,强制从URI读取GET操作的复杂参数 您可以阅读本文档以更好地理解Web API参数绑定: 默认情况下,Web API使用以下规则绑定参数: 如果参数是“简单”类型,Web API将尝试从URI获取值。简单类型包括.NET基本类型int、bool、double等,加上TimeSpan、DateTime、Guid、decimal和string,再加上任何带有可从字符串转换的类型转换器的类型。有关类型转换器的更多信息,请稍后参阅 对于复杂类型,Web API尝试使用媒体类型格式化程序从消息体读取值 这是标准的工作方式。如果使用[FromUri]属性,操作选择器将无法在接收不同复杂类型的不同Get方法之间进行选择。如果使用带有控制器和动作段的路由,则不会出现此问题,因为动作选择器将按动作名称进行选择,而不管参数是什么 出于这个原因,我不喜欢使用[FromUri],因为它不是处理GET操作的自然方式。但是你可以在必要的预防措施下使用它