semiColon
semiColon

Reputation: 201

Getting null value from Web api

I am trying to store a List of strings that are members of a conversation.

[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()
    {

    }
}

I am using Postman to make a Post request to the URI which seems to work fine, returning 201 Created and giving a json object containing the correct info. This is the json I am posting:

{
    "Key": "123",
    "ConversationName": "Test",
    "Administrator": "Ken",
   "Members": ["[email protected]", "[email protected]"]
}

However, when I try to get the conversation in a GET method this is the result:

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

These are my functions in my controller:

Post:

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

Any help would be much appreciated. Thanks!

Upvotes: 0

Views: 1435

Answers (1)

Gert Arnold
Gert Arnold

Reputation: 109327

The post basically returns the entity as you offer it, which is with Members, apparently.

The get loads a Conversation from the database. It can't have any Members at that moment, because Members is a List<string>, which can't possibly be mapped to a database column.

You probably expect the post to store the Members into the database. This doesn't happen, because you should use Member entities in stead of strings. Member can be a simple class having an Id and a string property.

Upvotes: 1

Related Questions