.net 字符串变量的值无法转换为整数

pokxtpni  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(176)

我目前正在开发商店中用户喜欢项目的功能。我的目标是允许用户喜欢一个产品并将其添加到喜欢的产品列表中,一个用户可以喜欢多个产品,并且每个产品可以被多个用户喜欢。但是,问题是当我在Postman中测试请求时,我得到一个400个带有无效用户格式的坏请求(我使用了第三个if条件),即使用户的实体中有一个int类型的Id。
调试时我发现:userString =“saymon”,并且用户已登录。
我哪里做错了?有什么建议吗?

//Here are product and user entity
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    [ForeignKey("UserId")]
    public User User { get; set; }
    public int UserId { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public byte[] PasswordHash { get; set; }
    public byte[] PasswordSalt { get; set; }
    public List<Product> Products { get; set; }
    public List<Product> LikedProducts { get; set; } = new List<Product>();
}

//And here is my endpoint in controller
[HttpPost("add-to-favorites/{productId}")]
public async Task<ActionResult> AddToFavorites(int productId)
{
    var userString = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
    var product = await _productRepository.GetProductById(productId);

    if (product == null)
    {
        return NotFound();
    }

    if (product.UserId.ToString() == userString)
    {
        return BadRequest("You cannot like your own product.");
    }

    if (!int.TryParse(userString, out int id))
    {
        return BadRequest("Invalid user ID format.");
    }

    var user = await _userRepository.GetUser(id);
    user.LikedProducts.Add(product);
    await _context.SaveChangesAsync();
    return Ok();
}
xdnvmnnf

xdnvmnnf1#

你的userString是一个声明值,很可能是一个字符串。可能是Eric,也可能是7cf7f915-aa34-4399-a2cd-5a7867163c0c。由于你没有提供一个具体的值,我们不知道里面到底有什么。
我们所知道的是,它不是一个用字符串表示的数字,例如"13"
所以你需要检查,如果你真的期望一个整数值,如果是,检查你是否检索到了正确的声明,如果你不期望一个整数,检查ClaimTypes.NameIdentifier实际上代表了什么类型,我打赌是Guid

相关问题