2012-05-08 8 views
5

Sono un newbie API Web che scrive un servizio AEST Web RESTFul in .Net 4. Ho configurato un controller per una classe che sto chiamando Authentication. Il problema che sto avendo è che quando inserisco o metto i dati JSON nel servizio API web, vengono chiamati i gestori del controller, ma gli oggetti parametro contengono dati NULL. Posso ottenere dati con successo, ma Post e Put hanno trovato oggetti parametro vuoti.. Rete 4 Web API che riceve i dati NULL nei parametri

Ho provato da un'applicazione client e Fiddler e ottengo lo stesso risultato. Ecco quello che mando da Fiddler:

Action: PUT 
URI: http://127.0.0.1:81/Authentication/xyz/ 
HTTP Version: HTTP/1.1 
Request Headers: 
User-Agent: Fiddler 
Host: 127.0.0.1:81 
Content-Type: application/json; charset=utf-8 
Content-Length: 75 
Request Body: 
{"hashvalue":"kbVFNeBbNHmYQXXlS6d7Ag==","password":"test","username":"dan"} 

Quando ho creato un punto di interruzione nel gestore Put nel controller di autenticazione:

public void Put(string IDstring, Authentication value) 
    { 

    } 

ottengo quanto segue nella finestra di controllo:

IDstring     null string 
value {bbsRESTResources.Authentication} bbsRESTResources.Authentication 
    hashvalue null string 
    password null string 
    username null string 

mia classe di autenticazione si presenta così:

namespace bbsRESTResources 
{ 
    public class Authentication 
    { 
     public string username; 
     public string password; 
     public string hashvalue; 
    } 
} 

il mio percorso è simile al seguente:

 routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

Si prega di non preoccuparti di se questo è un buon modo per gestire l'autenticazione. Questo è solo un primo passaggio per testare la mia applicazione da end-to-end. Ho cercato esempi di altre persone che hanno questo problema e non ne ho trovato.

risposta

0

E definire Metodo

public void Put(Authentication value) 
{ 

} 
+0

Ho ripulito il percorso per inviare {nome utente} e ho modificato la dichiarazione del metodo in: public void Put (nome utente stringa, valore di autenticazione). Ora, ottengo il nome utente correttamente, ma il valore è ancora un oggetto di autenticazione con tutti i valori nulli per i membri. Il gestore di post è codificato come hai postato (ma chiamato Post), e restituisce anche null per i membri dell'oggetto di autenticazione. – Dan

6

Si scopre che il modello di legante funziona solo sulle proprietà, non campi. Di conseguenza, avevo bisogno di creare proprietà dai singoli membri della classe Authentication. Quando ho cambiato la mia definizione della classe di autenticazione al seguente, funziona:

public class Authentication 
{ 
    public string hashvalue {get; set;} 
    public string password { get; set; } 
    public string username { get; set; } 
} 
+3

Inoltre, proprio come una nota di un punto critico che ho avuto riguardo un altro problema che può causare lo stesso problema. Assicurati che la riga del tipo di contenuto sia "Content-Type: application/json; charset = utf-8" –

2

ho avuto un problema simile (oggetti parametro erano null), causa diversa. Avevo contrassegnato il mio modello come serializzabile, e per qualche motivo il binding del modello non funzionava quando l'ho fatto. Una volta rimosso l'attributo, il binding ha funzionato di nuovo.

+0

Questo è molto strano, ho un problema simile a quello descritto nella domanda e rimuovere l'attributo Serializable aiutato! Grazie! –