从Web api获取null值

时间:2016-02-21 20:02:19

标签: c# json entity-framework-5 asp.net-web-api2

我正在尝试存储一个作为对话成员的字符串列表。

[DataContract]
public class Conversation
{
    [Key]
    [DataMember]
    public string Key { get; set; }
    [DataMember]
    public string ConversationName { get; set; }
    [DataMember]
    public string Administrator { get; set; }
    [DataMember]
    public List<string> Members { get; set; }

    public Conversation(string key, string name, string admin, List<string> members)
    {
        Key = key;
        ConversationName = name;
        Administrator = admin;
        Members = members;
    }

    public Conversation()
    {

    }
}

我正在使用Postman对URI进行Post请求,这似乎工作正常,返回201 Created并给出包含正确信息的json对象。 这是我发布的json:

{
    "Key": "123",
    "ConversationName": "Test",
    "Administrator": "Ken",
   "Members": ["y@12.com", "f@78.com"]
}

但是,当我尝试在GET方法中进行对话时,结果如下:

{
  "Key": "123",
  "ConversationName": "Test",
  "Administrator": "Ken",
  "Members": null
}

这些是我在控制器中的功能:

发表:

[HttpPost]
    //[ResponseType(typeof(Conversation))]
    public async Task<IHttpActionResult> PostConversation(Conversation convo)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.Conversations.Add(convo);
        await db.SaveChangesAsync();

        return CreatedAtRoute("DefaultApi", new { name = convo.Key }, convo);
    }

GET:

[HttpGet]
public IQueryable<Conversation> GetConversations()
{
    return db.Conversations;
}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

帖子基本上会在您提供实体时返回实体,显然是 Members

获取从数据库加载Conversation。它当时不能有Members,因为MembersList<string>,它可能无法映射到数据库列。

您可能希望帖子Members存储到数据库中。这不会发生,因为您应该使用Member 实体而不是字符串。 Member可以是一个具有Idstring属性的简单类。