MVC Web API搜索操作

时间:2014-04-08 22:22:07

标签: c# asp.net asp.net-web-api

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

My Web API在单个List对象上维护CRUD操作。我需要一种简单的方法来返回符合特定条件的所有电影列表。它需要是某种类型的过滤器,可以搜索特定电影中的所有朋友。因此,如果我的Movie对象包含" Title,Genre,Rating"等属性。等等,我输入"恐怖",然后它需要返回所有恐怖,但如果有一部电影的关键字"恐怖"在标题中,那么也应该返回。搜索应该跨越电影中的所有字段。

我该怎么做?我是否需要在API中手动编写GET方法?

3 个答案:

答案 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)

编写自己的方法很容易。 如果你想让它成为GET,那就用这个词开始你的方法

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

希望有所帮助