在对 .Net Core Web Api 的 POST 请求中省略 Id 属性

Posted

技术标签:

【中文标题】在对 .Net Core Web Api 的 POST 请求中省略 Id 属性【英文标题】:Omit Id property in POST request to .Net Core Web Api 【发布时间】:2021-11-20 16:40:28 【问题描述】:

我有一个小的 .Net 5 Web Api 项目。 应用代码优先方法。微软 SQL。 EF 核心。

问题是 - 当控制器接收没有 Id 的模型时 - 它失败 - “发生了一个或多个验证错误。”。如果控制器收到Id: 0 - 没关系,它可以工作。

问题是 - 是否可以在 POST 请求中省略 Id 属性? 我想从请求中完全省略 Id

型号:

public class Playback
    
        public int Id  get; set; 
        [Required] 
        public string Video_Name  get; set; 
        [Required]
        public string Video_Duration  get; set; 
        public string Playback_User  get; set; 
        public int Playback_Duration  get; set; 
    

控制器:

public async Task<IActionResult> AddPlaybackEvent2([FromForm] Playback model)
        
            Playback @event;
            try
            
                @event = new Playback();
                @event.Video_Name = model.Video_Name;
                @event.Video_Duration = model.Video_Duration;
                @event.Playback_User = model.Playback_User;
                @event.Playback_Duration = model.Playback_Duration;

                _db.Playbacks.Add(@event);
                _db.SaveChanges();

            
            catch (Exception e)
            
                return BadRequest(e.Message);
            

            return Ok(@event);
        

在 MS SQL 中检查 - 已配置 Id 列的主键和标识增量。

【问题讨论】:

你使用fluent api来设置Id主键自增吗? @Den 不。我认为 EF Core 是自动完成的。我只是在 MS SQL 中打开表并确保 Id 列是启用标识增量的主键。 【参考方案1】:

将此属性添加到您的模型。如果您使用代码优先方法,则需要在模型中进行设置

   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int Id  get; set; 

【讨论】:

以上是关于在对 .Net Core Web Api 的 POST 请求中省略 Id 属性的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 ASP.NET Core Web api 发布到另一个 ASP.NET Core Web api

如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?

ASP.NET Core Web Api 自动帮助页面

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

将 .Net Core Identity 和 OIDC 与多个 .Net Core Web API 结合使用

web API .net - .net core 对比学习-依赖注入