2016-04-28 4 views
0

Ich habe eine Methode in der Web-API, die ich das Objekt als Eingabe verwendet, aber wenn ich versuche, die API mit URI die Felder innerhalb des Objekts sind Null.komplexe Objekt ist leer, wenn in Web API-Eingabe

das ist meine Methode:

public class AddUser 
    {  
    public string UserEmailAddress { get; set; } 
    public string PasswordHash { get; set; } 
    public string Salt { get; set; } 
    public string RemoteRefNumber { get; set; } 
    } 

und dies ist der URI:

http://localhost:59509/Adduser/[email protected],pass,salt,remref/ 

es das Verfahren geht aber UserEmailAddress, PasswordHash

[HttpGet] 
    [Route("AddUser/{user}")] 
    public async Task<string> CreateUser([FromUri]AddUser user) 
    { 
     //LoansApiTrace.Trace.Verbose(EventId.Start,() => string.Format("{0}: {1}", "AddUser", user.)); 
     string Exception = await Repository.AddUserAsync(user); 
     return Exception; 
    } 

Diese AddUser Objekt ist , .. alle 4 sind leer.

+0

Warum würden Sie das Objekt eher in den Uri legen als in den Körper? –

+0

@RyanGates In einem 'GET'? –

+3

@KennethK. Ich glaube nicht, dass 'CreateUser' überhaupt ein' GET' sein sollte. Ich würde denken, dass es ein "POST" wäre. Ich schaute nicht genau genug hin. Jetzt, da ich es getan habe, scheint es mir merkwürdig. –

Antwort

3

Dies ist eine wirklich schlechte Übung, um geheime Daten über URI zu übermitteln, so wie Sie es tun. Dann werde ich nicht versuchen, eine Lösung zu geben, damit das funktioniert.

Die beste Praxis ist diese Art von Daten, die durch Ihre Anfrage Körper passieren und HTTP-POST-Methode verwenden:

[HttpPost] 
[Route("AddUser/{userId}")] 
public async Task<string> CreateUser(string userId, [FromBody]AddUser user) 
{ 
    // Find a user by userId 
    // Then update the user data. 
} 
  • Sie eine URI verwenden wie dieses =>http://localhost:59509/Adduser/12345 wo 12.345 der Benutzer-ID ist.
  • Sie müssen sicherstellen, dass die ausgewählte HTTP-Methode POST ist
  • Sie die Daten von AddUser in die Anforderungs Körper

Es unverbindliche auch HTTPS verwenden, wenn der Benutzer diese Art von schreiben müssen, müssen schicken Daten.

0

Betrachten POST Wenn Anwendbar

Verwendung Während es nicht tun können auch sein mag, können Sie das Hinzufügen dieser Felder innerhalb eines <form> betrachten wollen und sie an den Server einfach in den Körper mit der im Gegensatz zu veröffentlichen tatsächliche URL selbst Passwörter, Salze und Hashes sind generell nicht etwas, was man so herumreichen möchte.

Wenn Sie müssen ein Verwenden GET

Haben Sie versucht, sich als richtige Abfrage-String-Parameter stattdessen die Werte vorbei?

http://localhost:59509/Adduser/[email protected]&PasswordHash=abc&Salt=123&RemoteRefNumber=foo 

Dies sollte die folgenden Eigenschaften auf der Grundlage Ihrer aktuellen Routen festgelegt:

  • Benutzer = "user"
  • UserEmailAddress = "[email protected]"
  • PasswordHash = "abc"
  • Salz = „123“
  • RemoteRefNumber = „foo“

MVC hat eine Vorstellung davon, wie diese Eigenschaften mit denen auf Ihrer Klasse zu binden, so dass, wenn die Namen wie erwartet übereinstimmen, es Ich weiß nicht, wie man "Benutzer" mit "UserEmailAddress" abbildet. Wie bereits erwähnt, ist dies nicht ideal und kann alle Arten von Sicherheitsproblemen darstellen (verwenden Sie nur so etwas in Prototyp-/Nichtproduktionsumgebungen).

+0

http: // localhost: 59509/Benutzer hinzufügen/user? UserEmailAddress = test & PasswordHash = pas% E2% 80% 8C% E2% 80% 8Bs & Salt = Salz & RemoteRefNumber = Remref das gibt mir immer noch null. – Alma

Verwandte Themen