通过post方法发送的数据导致null对象

时间:2016-09-12 15:19:33

标签: c# post asp.net-web-api null odata

这是我第一次在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,因为它是数据库中的autonum,而且我已经搞乱了内容类型(json,text等)。这些都没有奏效。

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

编辑:这是在entityframework中按要求声明的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; }       

    }
}

1 个答案:

答案 0 :(得分:0)

好的,所以我发现了如何解决它,但我无法告诉你为什么这样做。我取出了odata路线,在我的odata配置中取出了除了我创建的实体集之外的所有内容。这是工作代码:

[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);