You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取已购电影接口返回空对象且200响应问题求助

问题排查与修复方案

核心问题分析

购买功能正常但获取已购电影接口返回200和空对象,说明数据已成功入库,但查询链路或用户身份识别环节存在异常。

排查与修复步骤

1. 修正用户ID获取逻辑

控制器中GetLoggetInUserId方法可能获取到无效的用户ID,导致查询无结果:

  • 验证HttpContext.User.Claims中是否存在键为"UserId"的合法Claim
  • 添加空值校验与日志输出,避免无效转换:
[HttpGet("CurrentUser")]
public int GetLoggetInUserId()
{
    var userIdStr = HttpContext.User.FindFirstValue("UserId");
    if (string.IsNullOrEmpty(userIdStr) || !int.TryParse(userIdStr, out int id))
    {
        _logger.LogError("无法从身份凭证中获取有效用户ID");
        throw new UnauthorizedAccessException("用户身份验证失败");
    }
    _logger.LogInformation("当前用户ID: {UserId}", id);
    return id;
}

2. 修复空集合判断逻辑

仓储层CartItems方法返回ToListAsync(),结果永远不会为null,只会是空集合。原控制器中的if (cartItems == null)判断永远不会触发:

  • 改为判断集合是否为空:
var cartItems = await this.shoping.CartItems(userId);

if (!cartItems.Any())
{
    return NoContent();
}

3. 验证仓储层查询逻辑

检查Cart与CartItem的关联是否正确,可添加日志输出查询SQL:

public async Task<IEnumerable<CartItem>> CartItems(int UserId)
{
    var query = from cart in this.context.Cart
                join cartItem in this.context.CartItem
                on cart.Id equals cartItem.CartId
                where cart.UserId == UserId
                select new CartItem
                {
                    Id = cartItem.Id,
                    MovieId = cartItem.MovieId,
                    mengde = cartItem.mengde,
                    CartId = cartItem.CartId,
                };
    _logger.LogInformation("购物项查询SQL: {Sql}", query.ToQueryString());
    return await query.ToListAsync();
}

4. 检查DTO转换逻辑

若cartItems有数据但转换后为空,需验证ConvertToDto方法:

  • 确保该方法正确通过MovieId关联电影数据,示例修复逻辑:
public static IEnumerable<CartItemDTO> ConvertToDto(this IEnumerable<CartItem> cartItems, IEnumerable<Movie> movies)
{
    return cartItems.Select(item => new CartItemDTO
    {
        Id = item.Id,
        MovieId = item.MovieId,
        Mengde = item.mengde,
        Movie = movies.FirstOrDefault(m => m.Id == item.MovieId)
    }).Where(dto => dto.Movie != null); // 过滤无对应电影的无效记录
}

5. 直接验证数据库数据

手动查询数据库确认:

  • 目标用户的Cart记录存在
  • 该Cart关联的CartItem记录已正确创建,且MovieId有效

内容的提问来源于stack exchange,提问作者Solin Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:25:14