我目前正在开发商店中用户喜欢项目的功能。我的目标是允许用户喜欢一个产品并将其添加到喜欢的产品列表中,一个用户可以喜欢多个产品,并且每个产品可以被多个用户喜欢。但是,问题是当我在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();
}
1条答案
按热度按时间xdnvmnnf1#
你的
userString
是一个声明值,很可能是一个字符串。可能是Eric
,也可能是7cf7f915-aa34-4399-a2cd-5a7867163c0c
。由于你没有提供一个具体的值,我们不知道里面到底有什么。我们所知道的是,它不是一个用字符串表示的数字,例如
"13"
。所以你需要检查,如果你真的期望一个整数值,如果是,检查你是否检索到了正确的声明,如果你不期望一个整数,检查
ClaimTypes.NameIdentifier
实际上代表了什么类型,我打赌是Guid
。