2016-04-14 30 views
2

我有一个非常简单的方法后:POST核心Web核心WebAPI奇怪的正文。没有正确序列化?

[HttpPost] 
     public IActionResult Post(AgreementType model) 
     { 
      var ag = _facade.AddOrUpdateAgreement(model); 
      return Json(ag); 
     } 

,并试图发送一些测试呼叫反对它,看它是否是通过正常的到来。不是这样。我已经检查了浏览器中的网络选项卡以及提琴手,并且请求对我来说绝对看起来不错。 (内容类型是应用程序/ JSON和身体就好了)。

我在服务器端post方法中放置了一个断点,它正在进入该方法,并且模型的结构正常,只是所有的字符串都为空并且数组为空。

感觉就像一个序列化的问题,看起来像我刚开始一个空的(新)AgreementType模型,而不是一个上来的......

编辑:这里是JSON和C#型号:

JSON:

{ 
    "QuestionCategories": [1], 
    "Id": 1, 
    "Name": "Name", 
    "ShortName": "Short Name" 
} 

型号:

namespace DTModels.Models 
{ 
    public class AgreementType 
    { 
     public virtual ICollection<QuestionCategory> QuestionCategories { get; set; } 

     public AgreementType() 
     { 
      QuestionCategories = new HashSet<QuestionCategory>(); 
     } 

     public int Id { get; set; } 
     public string Name { get; set; } 
     public string ShortName { get; set; } 
    } 
} 
+0

将'[FromBody]'属性添加到您的参数中,并查看数据是否被您的参数接受。 –

+1

向我们展示模型和JSON。事实上,我们没有足够的信息来猜测问题出在哪里。 – Amy

+0

@KennethK。我尝试过,然后模型只是null。 – pQuestions123

回答

2

在你的c#对象中QuestionCategories是QuestionCategory的集合,但是在你的json中你正在发送一个int集合。那不会映射。 YourJson必须像

{ 
    "QuestionCategories": [ 
          {"prop1" : "value", 
          "prop2": "value"}, 
          {"prop1": "value", 
          "prop2": "value"} 
         ], 
    "Id": 1, 
    "Name": "Name", 
    "ShortName": "Short Name" 
} 

凡PROP1和PROP2是QuestionCategory的性质和我的例子就是传递2个对象的收藏。你也需要将头文件中的内容类型设置为application/json。

+0

谢谢是的,它看起来是你的答案和我的答案的组合。 – pQuestions123

0

想通了出。确保您的内容长度已设置!