0

我的 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 辆汽车),但只有第一辆汽车有正确的字段值(名称、价格等),其余汽车在所有字段中为空。

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

// 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 进行序列化。

4

1 回答 1

0

我查看了数据库访问代码,并将授权代码放入 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);
        }
    }

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

于 2012-04-09T12:30:54.047 回答