C# MVC Web API搜索操作
我对ASP.NETWebAPI相当陌生。我想知道是否有一种简单的方法来执行搜索操作?类似于/api/movie的东西?$sortby=例如TitleC# MVC Web API搜索操作,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我对ASP.NETWebAPI相当陌生。我想知道是否有一种简单的方法来执行搜索操作?类似于/api/movie的东西?$sortby=例如Title 我的Web API在单个列表对象上维护CRUD操作。我需要一个简单的方法返回所有电影的列表,符合一定的标准。它需要某种类型的过滤器来搜索特定电影中的所有朋友。因此,如果我的电影对象包含诸如标题、流派、评级等属性,并且我输入了恐怖,那么它需要返回所有恐怖,但是如果有一部电影的标题中包含关键字恐怖,那么也应该返回。搜索应该跨越电影中的所有字段 我该怎么
我的Web API在单个列表对象上维护CRUD操作。我需要一个简单的方法返回所有电影的列表,符合一定的标准。它需要某种类型的过滤器来搜索特定电影中的所有朋友。因此,如果我的电影对象包含诸如标题、流派、评级等属性,并且我输入了恐怖,那么它需要返回所有恐怖,但是如果有一部电影的标题中包含关键字恐怖,那么也应该返回。搜索应该跨越电影中的所有字段
我该怎么做?我是否需要在API中编写手动处理此问题的GET方法?编写自己的方法非常简单。 如果你想得到它,就用这个词开始你的方法
public IEnumerable<Movie> GetCustomSearch(string lookfor)
{
return db.movies.where(p => p.Genere.Contains(lookfor));
}
这是可行的,但不确定sintax是否100%正确
/api/movie?lookfor=Horror
希望对你有所帮助我做了以下几点,似乎效果不错
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));
}
}
要为get方法启用OData操作,请将集合作为IQueryable返回。要通过以下示例进行说明: 然后您可以在请求中编写/api/movie?$orderby=Title
使用IEnumerable和IQueryable的区别在于后者使用应用的OData约束计算查询,只返回匹配的数据。前者将所有数据加载到内存中,然后应用约束。MyWebAPI在单个列表对象上维护CRUD操作单个静态列表?虽然我知道你可能在学习概念,这种方法可能过于简单,无法真正了解重要的原则。我是否可以注意到,搜索是专门的过程,如果您搜索的数据集有许多记录,则可能需要专门的存储过程和精简的实体或域对象来提高性能。与我给您的示例相同:/you should考虑使用标准的ODATA操作,而不是滚动自己的解决方案。OData受Web API的开箱即用支持;只需从Get方法返回IQueryable即可。
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));
}
}
public IQueryable<MovieData> Get()
{
if (MovieRepository != null)
{
return MovieRepository;
}
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFount));
}