ASP.NETWebAPIで次のアクションがあります。
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台の車があります)が、適切なのは最初の車だけです。フィールド値(名前、価格など)の場合、残りの車はすべてのフィールドで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;
}
それを削除した後、すべてが完全に正常に機能し、すべての車がフィールドに適切な値を持ちます(もはやnullではありません)...
このimoの非常に奇妙な振る舞いを説明する方法を知っていますか?
私はそれが重要だとは思いませんが(この種の承認がない他のすべてのアクションは問題なく機能するため)、Androidアプリからはgsonを使用して逆シリアル化し、サーバー側ではJSONを使用します。シリアル化するNET。