【问题标题】:ASP.NET Web API returns only one object in collectionASP.NET Web API 只返回集合中的一个对象
【发布时间】:2012-04-21 19:24:24
【问题描述】:

我的 ASP.NET Web API 中有以下操作:

    public IEnumerable<Car> carssOfUser(int id, String username, String password)
    {

        using (var context = new CarEntities())
        {
            // Authorization. Allow user only to get his own cars
            User userQueried = context.Users.Where(u => u.id == id).FirstOrDefault();
            if (!userQueried.username.Equals(username))
            {
                throw new HttpResponseException(HttpStatusCode.Unauthorized);
                //return null;
            }

            IEnumerable<Car> cars = context.Cars.Where(p => p.ownerId == id).ToList();
            return cars;
        }
    }

但是,如果我从 Android 应用程序查询它以获取给定用户的汽车(通过 json).. 假设 id 为 2,它返回 9 辆汽车的集合(没错,用户 2 有 9 辆汽车),但只有第一个car 具有正确的字段值(名称、价格等),其余汽车的所有字段都为 null。

这真的很奇怪,因为我添加这几行代码时出现了问题:

// Authorization. Allow user only to get his own cars
            User userQueried = context.Users.Where(u => u.id == id).FirstOrDefault();
            if (!userQueried.username.Equals(username))
            {
                throw new HttpResponseException(HttpStatusCode.Unauthorized);
                //return null;
            }

删除它后,一切正常,所有汽车在字段中都有正确的值(不再是空值)......

您知道如何解释这种 imo 非常奇怪的行为吗?

我认为这并不重要(因为我没有这种授权的所有其他操作都没有问题),但我想提一下,从 Android 应用程序中我使用 gson 反序列化,在服务器端我使用 JSON.NET 进行序列化。

【问题讨论】:

  • 在您的第二个代码示例中,如果用户名与找到的用户的用户名匹配,您将抛出异常
  • 是的,这只是一个错字。 (上面sn-p中的代码是正确的)。也更正了第二个 sn-p。
  • 你有没有试过先拉车,然后做授权检查?这真是奇怪的行为。您的 CarEntities 是唯一的上下文对象吗?您是否使用 EDM 并有一些特定的关联配置?

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

我查看了数据库访问代码,并将授权代码放入 using 语句:

    using (var context = new GeoDiaryEntities())
    {
        // Authorization. Allow user only to get his own travels
        User userQueried = context.Users.Where(u => u.id == id).FirstOrDefault();
        if (!userQueried.username.Equals(username))
        {
            throw new HttpResponseException(HttpStatusCode.Unauthorized);
        }
    }

它有帮助,现在可以工作了。 但是,我不确定为什么在单独的上下文中执行此代码会有所帮助.. 有什么想法吗?

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多