如何修复我的API中的“异常:无效通道”错误

时间:2019-06-04 15:19:23

标签: entity-framework .net-core

我正在尝试在API Controller中使用HTTP Post方法保存对象,但是它返回错误,我试图在另一个控件中执行同样的操作,并且它可以正常工作。希望您能帮忙!

我尝试过的请求

  {
    "integrationServiceHost": "10.80.80.10",
    "RouterHost": "10.80.80.10",
    "Enabled": "false",
    "IntegrationServiceRemotePort": "1234",
    "RouterSocketPort":"1234",
    "RouterRemotePort":"1234",
    "IDChannelBehavior":"10",
    "IDEPS":"1",
    "Description":"Teste Whats",
    "IDChannel":"0"
  }

ChannelWhatsapp类:

public class ChannelWhatsApp : Channel
{
    public ChannelWhatsApp();

    [Column("WHATSAPP_UserName")]
    public string UserName { get; set; }
    [Column("WHATSAPP_Password")]
    public string Password { get; set; }
    [Column("WHATSAPP_DisplayName")]
    public string DisplayName { get; set; }
} 

url:http://172.19.22.81:5000/api/channelWhatsapp/saveDto

频道类别:

public abstract class Channel : NotifyPropertyChanged
{
    public Channel();

    public virtual ICollection<Interaction> Interaction { get; set; }
    public virtual ICollection<Schedule> Schedule { get; set; }
    public virtual ICollection<Queue> Queue { get; set; }
    public virtual ICollection<Session> Session { get; set; }
    public virtual ChannelBehavior ChannelBehavior { get; set; }
    public virtual EPS EPS { get; set; }
    public DateTime? DtLastChange { get; set; }
    [MaxLength(100)]
    public string IntegrationServiceHost { get; set; }
    [MaxLength(100)]
    public string RouterHost { get; set; }
    public bool Enabled { get; set; }
    public int? IntegrationServiceRemotePort { get; set; }
    public int? RouterSocketPort { get; set; }
    public int? RouterRemotePort { get; set; }
    [ForeignKey("ChannelBehavior")]
    public int IDChannelBehavior { get; set; }
    [ForeignKey("EPS")]
    public int IDEPS { get; set; }
    [MaxLength(200)]
    public string Description { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int IDChannel { get; set; }
    [NotMapped]
    public string IconName { get; set; }
    [NotMapped]
    public byte? PendingPauseCode { get; set; }
    [NotMapped]
    public bool IsPausePending { get; set; }
    [NotMapped]
    public SystemUserOperator Operator { get; set; }
    [NotMapped]
    public DateTime StateMomment { get; set; }
    [NotMapped]
    public UserStateType CurrentState { get; set; }
    public virtual ICollection<ChannelSkill> ChannelSkills { get; set; }
    [NotMapped]
    public ChannelTypeType Type { get; set; }
}

我的控制器:

[Route("api/ChannelWhatsapp/{Action}")]
[ApiController]
public class ChannelWhatsappController : IrideController<ChannelWhatsApp>
{
    public ChannelWhatsappController(IrideContext context) : base(context) { }


    [HttpPost("")]
    [ActionName("saveDto")]
    public IActionResult saveDto([FromBody] ChannelWhatsApp entity)
    {
        try
        {

            ////Obtem o data 
            //entity.DtLastChange = IrideUtil.getDate() ;

            //_context.Set<ChannelWhatsApp>().Update(entity);
            //_context.SaveChanges();
            return Ok(entity);
        }
        catch (Exception ex)
        {
            return Ok(ex.ToString());
        }
    }
}

返回的错误:

  

异常:无效的通道IrideCM.Model.Channel..ctor()   IrideCM.Model.ChannelWhatsApp..ctor()lambda_method(Closure)   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader   阅读器,JsonObjectContract objectContract,JsonProperty   containerMember,JsonProperty containerProperty,字符串ID,输出为布尔   JsonSerializerInternalReader.cs中的createdFromNonDefaultCreator)   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader   reader,类型objectType,JsonContract合同,JsonProperty成员,   JsonContainerContract containerContract,JsonProperty containerMember,   JsonSerializerInternalReader.cs中的对象existValue)   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader   阅读器,在其中键入objectType,bool checkAdditionalContent)   JsonSerializerInternalReader.cs

1 个答案:

答案 0 :(得分:0)

将有效负载发布到请求主体中的控制器时,您需要确保有效负载的结构与预期类的结构匹配。

对于您而言,它根本不匹配。您只需要发布与终端节点的FromBody参数中预期类型相同的有效负载即可。