我对ASP.NET Web API很陌生。我想知道是否有一种简单的方法来执行搜索操作?类似于/ api / movie的东西?$ sortby =例如标题。
My Web API在单个List对象上维护CRUD操作。我需要一种简单的方法来返回符合特定条件的所有电影列表。它需要是某种类型的过滤器,可以搜索特定电影中的所有朋友。因此,如果我的Movie对象包含" Title,Genre,Rating"等属性。等等,我输入"恐怖",然后它需要返回所有恐怖,但如果有一部电影的关键字"恐怖"在标题中,那么也应该返回。搜索应该跨越电影中的所有字段。
我该怎么做?我是否需要在API中手动编写GET方法?
答案 0 :(得分:4)
我做了以下,似乎工作得很好。
public IEnumerable<MovieData> Get(string searchstr)
{
if (MovieRepository != null)
{
var query =
from movie in MovieRepository
where
(movie.Title != null && movie.Title.Contains(searchstr)) ||
(movie.Genre != null && movie.Genre.Contains(searchstr)) ||
(movie.Classification != null && movie.Classification.Contains(searchstr)) ||
(movie.Cast != null && movie.Cast.Contains(searchstr)) ||
(movie.Rating.ToString() != null && movie.Rating.ToString().Contains(searchstr)) ||
(movie.ReleaseDate.ToString() != null && movie.ReleaseDate.ToString().Contains(searchstr))
select movie;
return query.AsEnumerable();
}
else
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
}
答案 1 :(得分:3)
要为get方法启用OData操作,请将您的集合作为IQueryable<T>
返回。使用your answer中的示例进行说明:
public IQueryable<MovieData> Get()
{
if (MovieRepository != null)
{
return MovieRepository;
}
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFount));
}
然后您可以在请求中写下/api/movie?$orderby=Title
。
使用IEnumerable和IQueryable之间的区别在于后者使用应用的OData约束评估查询,仅返回匹配的数据。前者将所有数据加载到内存中,然后应用约束。
答案 2 :(得分:2)
public IEnumerable<Movie> GetCustomSearch(string lookfor)
{
return db.movies.where(p => p.Genere.Contains(lookfor));
}
所以在你的客户端,如果你正在使用Jquery
$.ajax({
type: 'GET',
ulr: 'yourUrl',
data: { lookfor: 'Horror' }
})
这有效,但不确定sintax是否100%正确
/api/movie?lookfor=Horror
希望有所帮助