通过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; }
}
}
好的,所以我找到了如何修复它,但我不能告诉你为什么它工作。我取出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);