C# MVC Web API搜索操作

C# 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操作。我需要一个简单的方法返回所有电影的列表,符合一定的标准。它需要某种类型的过滤器来搜索特定电影中的所有朋友。因此,如果我的电影对象包含诸如标题、流派、评级等属性,并且我输入了恐怖,那么它需要返回所有恐怖,但是如果有一部电影的标题中包含关键字恐怖,那么也应该返回。搜索应该跨越电影中的所有字段 我该怎么

我对ASP.NETWebAPI相当陌生。我想知道是否有一种简单的方法来执行搜索操作?类似于/api/movie的东西?$sortby=例如Title


我的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));
}