WEB API返回所有对象而不是一个

时间:2013-10-21 03:34:04

标签: json asp.net-web-api asp.net-mvc-scaffolding

我想从我的数据库中公开服务列表,或者只使用我的EF DBmodel通过Web API返回一个服务详细信息。我使用VS2012 Web API脚手架,到目前为止非常简单,当我点击URL JSON时,它可以在(.../api/Services)中返回服务列表。问题是,当我想获得一个服务URL (.../api/Services/1)时,我仍然获得所有服务的完整列表,尽管当我跟踪它时似乎只返回1个对象的计数。

这里发生了什么?

以下是2个控制器操作。

ps:我还尝试使用.Where()代替.Find(),但结果在两种情况下都相同。

    // GET api/Services
    public IEnumerable<service> Getservices()
    {
        var services = db.services.Include(s => s.Category).Include(s => s.Country).Include(s => s.StateProvince).Include(s => s.Territory);
        return services.AsEnumerable();

    }
    // GET api/Services/5
    public service Getservice(int id)
    {
        service service = db.services.Find(id);          
        if (service == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }
        return service;
    }

2 个答案:

答案 0 :(得分:0)

尝试将其处理为:var service = db.services.Single(s => s.Id == id)

答案 1 :(得分:0)

首先,检查您的数据库是否有一个查询项目。

如果您通过主键查询,那么 db.services.SingleOrDefault(s => s.Id == id)应该这样做。

如果您在某个字段上查询可能会返回多个结果,则需要处理异常。

您使用的过滤变体(Single, SingleOrDefault, First, FirstOrDefault)将取决于代码的确切语义。