在 .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; }
}
我是 .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; }
}