在 .NET Core 中使用 HTTP POST 添加新对象时出错

Getting error when adding new object with HTTP POST in .NETCore

我是 .NetCore 和 Blazor 的新手。我正在尝试制作一部新动漫的 POST,但我总是收到错误消息“需要类型字段。”我已将 genreId 添加到 JSON 对象,但仍然出现相同的错误 -> Screenshot of the error

这是一对多的关系,一种动物只能有一种类型,但一种类型可以有很多敌人。

我不知道它是否有用,但这是我在数据库中的两个表的屏幕截图 -> Anime table and the Genre tab

这是我的模特:

动漫模特

public class Anime
{
    public int Id { get; set; }
    public string Title { get; set; } = string.Empty;
    public string Description { get; set; } = string.Empty;
    public string CoverImage { get; set; } = string.Empty;
    public string Author { get; set; } = string.Empty;
    public Genre Genre { get; set; }
    public string Studio { get; set; } = string.Empty;
    public DateTime? ReleaseDate { get; set; }
    public DateTime? EndDate { get; set; }
}

类型模型

public class Genre
{
    public int Id { get; set; }
    public string Title { get; set; } = string.Empty;
    [JsonIgnore]
    public List<Anime> Animes { get; set; }
}

AnimeService,我将新动漫添加到数据库中

public async Task<ServiceResponse<List<Anime>>> AddAnime(Anime NewAnime)
{
    ServiceResponse<List<Anime>> serviceResponse = new ServiceResponse<List<Anime>>();

    _dataContext.Animes.Add(NewAnime);
    await _dataContext.SaveChangesAsync();

    var animes = await _dataContext.Animes
        .Include(a => a.Genre)
        .ToListAsync();

    if (animes == null)
    {
        serviceResponse.Success = false;
        serviceResponse.Message = "Animes could be found!";
    }

    serviceResponse.Data = animes;

    return serviceResponse;
}

动漫控制器

[HttpPost]
[Route("AddAnime")]
public async Task<ActionResult<ServiceResponse<List<Anime>>>> AddAnime(Anime NewAnime)
{
    return Ok(await _animeService.AddAnime(NewAnime));
}

您的 Anime 实例似乎没有流派对象,但在您的数据库上下文中需要它

如果您认为 Genre 是可选的,则必须添加导航 属性 GenreId 可以为 null

   public class Anime
{
    public int Id { get; set; }
    ... another properties
    
   public int? GenreId { get; set; }
    public  virtual Genre Genre { get; set; }

}

在此之后,您将必须进行新的数据库迁移

正如我们在 Discord 上讨论的那样:

您正在使用启用了 nullables 的 .NET 6。

由于动漫可以在分配流派之前存在,因此我会像这样配置表格:

public class Anime
{
    public int Id { get; set; }
    public string Title { get; set; } = string.Empty;
    public string Description { get; set; } = string.Empty;
    public string CoverImage { get; set; } = string.Empty;
    public string Author { get; set; } = string.Empty;
    public int? GenreId { get; set; }

    [ForeignKey(nameof(GenreId))]
    public Genre? Genre { get; set; }

    public string Studio { get; set; } = string.Empty;
    public DateTime? ReleaseDate { get; set; }
    public DateTime? EndDate { get; set; }
}

public class Genre
{
    public int Id { get; set; }
    public string Title { get; set; } = string.Empty;

    [JsonIgnore]
    [InverseProperty(nameof(Anime.Genre))]
    public List<Anime> Animes { get; set; }
}