2016-02-29 2 views
0

Je tente de mettre à jour une variable dans une classe "Conversation" mis les objets de paramètre ne sont pas contraignantes pour une raison quelconque. Je ne sais pas pourquoi pas. En conséquence, je reçois cette erreur:NullObjectReference lors de l'exécution d'un PUT dans Web Api

"Object reference not set to an instance of an object.",

Controller:

[HttpPut] 
public async Task<IHttpActionResult> AddMember(string key, User user) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    Conversation conver = await db.Conversations.FindAsync(key);  //THIS IS NULL 

    if (conver == null) 
    { 
     return NotFound();  //METHOD IS ENDING HERE 
    } 

    conver.Members.Add(user); //THIS IS NULL 

    db.Entry(conver).State = EntityState.Modified; 
    try 
    { 
     await db.SaveChangesAsync(); 
    } 
    catch (DbUpdateConcurrencyException) 
    { 
     return NotFound(); 
    } 

    return StatusCode(HttpStatusCode.NoContent); 
} 

Modèle de l'utilisateur:

namespace AcademicAssistant.Models 
{ 
    [DataContract] 
    public class User 
    { 
     [Key] 
     [DataMember] 
     public string Email { get; set; } 

     [DataMember] 
     public string Password { get; set; } 

     [DataMember] 
     public bool Admin { get; set; } 

    } 
} 

Modèle Conversation Classe:

[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 virtual ICollection<User> Members { get; set; } 

    [DataMember] 
    public virtual ICollection<Message> Messages { get; set; } 

} 

Je teste cela dans Postman comme ceci:

ROUTE = api/Conversations/AddMember/?key="1LM4"

JSON = {"user": { "Email": "[email protected]", "Password" : "Passw-1", "Admin" : true } }

Répondre

0

SOLUTION:

La route aurait dû être

api/Conversations/AddMember/?key=1LM4

et le JSON formaté l comme ceci:

{ 
    "Email": "[email protected]", 
    "Password" : "Passw-1", 
    "Admin" : true 
}