【发布时间】: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