通过post方法发送的数据结果为空对象

本文关键字:结果 对象 数据 post 方法 通过 | 更新日期: 2023-09-27 18:06:44

这是我第一次在stackoverflow上提问。我已经在这个网站上搜索了很多次寻找答案,但这是我第一次问我自己的!希望我能给出足够的信息,这样你们就能理解我的问题了。

基本上,我已经在我们的数据库sqlserver上创建了一个新表。我已经在我们的实体框架中创建了一个新的实体来映射到这个表。问题是这个数据库表的odata控制器中的post方法。方法如下:

[HttpPost]
    [ODataRoute("TerminalPersonnelEmails/LoadEmail()")]
    [ResponseType(typeof(TerminalPersonnelEmail))]        
    public async Task<IHttpActionResult> PostAsync(TerminalPersonnelEmail email)
    {
        if (email == null)
        {
            throw new ArgumentException("The data entry given is invalid");
        }
        portalDatabaseContext.TerminalPersonnelEmails.Add(email);
        await portalDatabaseContext.SaveChangesAsync();
        //return Created(email);
        return Ok("test"); //will be replaced once post method is fixed
    }

这是我通过邮递员发送的邮件:

  {"TerminalEmail" :{
"Id" : 1,
"Name" : "NewEmail",
"Email" : "email@email.com",
"TerminalNumber" : 23084093284 } }

(抱歉奇怪的缩进/括号的位置。当我粘贴代码时,1或2个缩进被关闭,我的邮差代码混乱了,所以我尽可能地修复了它,把它放入代码块框中。

我已经尝试了几种方法来发送这个数据。我试过只是发送数据,而不是将其聚集到"TerminalEmail"中,而不是发送Id,因为它是数据库中的自动Id,我已经混淆了内容类型(json,文本等)。

我已经确保数据与对象匹配,以便它应该传递一个有效的对象给c#方法,但它仍然是空的。我已经用尽了所有的选择,需要你的帮助。谢谢!

编辑:这是在实体框架中声明terminalpersonnelemail类的请求:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Marketing.EntityFramework.Portal
{
    [Table("TerminalPersonnelEmails", Schema = "Portal")]
    public class TerminalPersonnelEmail
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        [Required, MaxLength(50)]
        public string Name { get; set; }
        [Required, MaxLength(50)]
        public string Email { get; set; }
        [Required]
        public int TerminalNumber { get; set; }       
    }
}

通过post方法发送的数据结果为空对象

好的,所以我找到了如何修复它,但我不能告诉你为什么它工作。我取出odata路由,并在odata配置中取出除了我创建的entityset之外的所有内容。下面是工作代码:

[HttpPost]
        [ResponseType(typeof(TerminalPersonnelEmail))]        
        public async Task<IHttpActionResult> Post(TerminalPersonnelEmail email)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (email == null)
            {
                throw new ArgumentException("The data entry given is invalid");
            }

            portalDatabaseContext.TerminalPersonnelEmails.Add(email);
            await portalDatabaseContext.SaveChangesAsync();
            return Created(email);