2012-05-08 6 views
5

Ich bin ein Web-API-Neuling einen RESTful Web Service Api in .Net zu schreiben 4. Ich habe einen Controller für eine Klasse konfigurierte I Authentication nenne. Das Problem, das ich habe, ist, dass, wenn ich JSON-Daten zum Web-API-Dienst posten oder setzen, meine Handler in der Steuerung aufgerufen werden, aber die Parameterobjekte NULL-Daten enthalten. Ich kann erfolgreich Daten erhalten, aber Post und Put kommen mit leeren Parameterobjekten..NET 4 Web API NULL-Daten in Parametern empfangen

Ich habe von einer Client-Anwendung und Fiddler getestet, und ich bekomme das gleiche Ergebnis. Hier ist das, was ich sende von Fiedler:

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"} 

Wenn ich einen Haltepunkt in den Put-Handler in dem Authentication-Controller gesetzt:

public void Put(string IDstring, Authentication value) 
    { 

    } 

ich folgend in den Uhren Fenster:

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

meine Authentifizierungs Klasse sieht wie folgt aus:

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

meine Strecke sieht wie folgt aus:

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

Bitte beziehen Sie sich nicht mit, ob dies eine gute Möglichkeit, die Authentifizierung zu behandeln. Dies ist nur ein erster Durchlauf beim Testen meiner Anwendung von Ende zu Ende. Ich habe nach anderen Leuten gesucht, die dieses Problem haben, und habe keine gefunden.

Antwort

0

Und definieren Methode als

public void Put(Authentication value) 
{ 

} 
+0

Ich bereinigte meine Route, um {username} zu senden und änderte die Methodendeklaration in: public void Put (string username, Authentication value). Jetzt bekomme ich den Benutzernamen korrekt, aber der Wert ist immer noch ein Authentifizierungsobjekt mit allen Nullwerten für die Mitglieder. Der Post-Handler ist so codiert, wie Sie ihn veröffentlicht haben (aber Post genannt), und gibt auch Nullen für die Mitglieder des Authentication-Objekts zurück. – Dan

6

Es stellt sich heraus, dass das Modell Bindemittel nur auf Eigenschaften arbeitet, keine Felder. Als Ergebnis musste ich Eigenschaften aus den einzelnen Mitgliedern der Klasse Authentication machen. Wenn ich meine Definition der Authentifizierung Klasse in die folgenden geändert, funktioniert es:

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

Auch nur eine Notiz von einem Knackpunkt, den ich in Bezug auf ein anderes Problem hatte, das das gleiche Problem verursachen kann. Stellen Sie sicher, dass die Zeile des Inhaltstyps "Content-Type: application/json; charset = utf-8" ist. –

2

Ich hatte ein ähnliches Problem (Parameterobjekte waren null), andere Ursache. Ich hatte mein Modell als serialisierbar markiert, und aus irgendeinem Grund funktionierte das Modellieren nicht, wenn ich das tat. Sobald ich das Attribut entfernt hatte, funktionierte die Bindung erneut.

+0

Das ist sehr seltsam, ich habe ein Problem ähnlich dem, das in der Frage beschrieben wird, und das Entfernen des serialisierbaren Attributs half! Vielen Dank! –