Web API POST 请求添加新记录,但是所有属性都设置为 NULL?

Posted

技术标签:

【中文标题】Web API POST 请求添加新记录,但是所有属性都设置为 NULL?【英文标题】:Web API POST Request adding a new record, however all attributes are set to NULL? 【发布时间】:2021-06-19 06:06:43 【问题描述】:

我有一个 Web API POST 请求,它应该使用在正文中找到的属性作为 JSON 将新记录添加到特定表。但是,当输入所有属性(我认为这是正确的)时,请求最终会添加一条新记录,但是无论出于何种原因,所有属性都将设置为 NULL?

以下是我的 API 发布请求:

/*Define URL endpoint for adding a single role*/
        [System.Web.Http.Route("api/Roles/addRole")]
        /*HttpPost header, ensures only the usage of POST requests*/
        [System.Web.Mvc.HttpPost]
        /*Main return new list with added role*/
        public List<dynamic> addRole([FromBody] Roles roles)
        
            if (roles != null)
            
                /*Create an instance of the UltimateDB*/
                UltimateDBEntities db = new UltimateDBEntities();
                /*Optimize memory usage by disabling proxy creation*/
                db.Configuration.ProxyCreationEnabled = false;
                db.Roles.Add(roles);
                db.SaveChanges();
                return getAllRoles();
            
            else
            
                return null;
            
            
        

以上内容应使用用户输入的正文 (JSON) 中的数据向“角色”表添加一条记录。我使用 Postman 对此进行了测试,返回的只是一条所有属性都设置为 NULL 的新记录。

例如,我会输入这个:


    "Name": "Lab Employee",
    "Description": "User only has read rights",
    "Tenant_rental": 1,
    "Property_Module": 0,
    "Employee_Management": 0,
    "Reports": 1,
    "administration": 1,
    "user_Password_access": 0,
    "Building_Management": 0,
    "Credit_Bureau": 1

并把它作为我的新记录:


        "ID": 23,
        "Name": null,
        "Description": null,
        "Tenant_rental": null,
        "Property_Module": null,
        "Employee_Management": null,
        "Reports": null,
        "administration": null,
        "user_Password_access": null,
        "Building_Management": null,
        "Credit_Bureau": null
    

我的角色类:

namespace U18043039_HW1.Models

    using System;
    using System.Collections.Generic;
    
    public partial class Roles
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Roles()
        
            this.User_Table = new HashSet<User_Table>();
        
    
        public int Role_ID  get; set; 
        public string Role_Name  get; set; 
        public string Role_Description  get; set; 
        public Nullable<bool> Role_Tenant_rental  get; set; 
        public Nullable<bool> Role_Property_Module  get; set; 
        public Nullable<bool> Role_Employee_Management  get; set; 
        public Nullable<bool> Role_Reports  get; set; 
        public Nullable<bool> Role_administration  get; set; 
        public Nullable<bool> Role_user_Password_access  get; set; 
        public Nullable<bool> Role_Building_Management  get; set; 
        public Nullable<bool> Role_Credit_Bureau  get; set; 
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<User_Table> User_Table  get; set; 
    

【问题讨论】:

你能展示你的角色类吗? @Sergey 我已经添加了 【参考方案1】:

使用此数据进行测试:


    "Role_Name": "Lab Employee",
    "Role_Description": "User only has read rights",
    "Role_Tenant_rental": True,
    "Role_Property_Module":False,
    ... and so on

【讨论】:

此更改限制我返回 getAllRoles -“无法将类型 'System.Collections.Generic.List' 隐式转换为 'System.Collections.Generic.IENumerable'存在显式转换(您是否缺少演员表?)" 我现在得到:System.InvalidCastException: '无法转换类型为'System.Collections.Generic.List1[System.Object]' to type 'System.Collections.Generic.IEnumerable1[U18043039_HW1.Models.Roles]'的对象。' 没关系,上一张也行 好的,这是我的问题。非常感谢

以上是关于Web API POST 请求添加新记录,但是所有属性都设置为 NULL?的主要内容,如果未能解决你的问题,请参考以下文章

Web Api如何传递POST请求

Web Api 属性路由与 POST 请求不匹配

如何在 POST API 中创建请求 ID 并记录它

在Web Api中实现Http方法(Get,Put,Post,Delete)

使用 POSTMAN 或任何其他方式批量 POST/PUT API 请求

如何允许API网关代理与POST请求的Cognito Authorizer集成?