2017-02-01 2 views
0

Ich erstelle ein Web-API-Projekt und möchte meinem Modell eine Validierung hinzufügen, also habe ich ein DataAnnotation-Attribut hinzugefügt.Web-API Datenanmerkungen verursachen 500 Serverfehler, wenn sie bestanden werden

Ich testete das Projekt dann, indem ich versuchte, mein Objekt von einem separaten MVC-Projekt zu übergeben. Ich habe einen Fehler von 500 Servern erhalten.

Durch das Entfernen der DataAnnotation kann ich das Objekt erfolgreich übergeben. Warum?

Ich habe ein paar Tutorials wie this und this angeschaut, sie zeigen, wie Validierungsfehler zu behandeln, aber das hat nicht geholfen.

UPDATE

die Daten Anmerkung aus MyProperty in Class1, Lösung B Entfernen (aber es auf die Klasse in Lösung A zu verlassen) bedeutet Werte erfolgreich geführt werden kann! Ist das ein Problem beim Entkernen des Objekts? Wenn ja, wie löse ich es?

B = Mein Web-Service das Objekt

A = Mein mvc Projekt sendet das Objekt reciving

mein Code der resquest

public class Class1 
{ 
    [Required(ErrorMessage = "MyProperty value is required")]//remove this line to make it work 
    public int MyProperty { get; set; } 
    public Class2 MyOtherProperty { get; set; } 
} 

public class Class2 
{ 
    public string SomeProperty { get; set; } 
} 


    async Task<string> Test2() 
    { 
     var form = new Class1(); 
     form.MyProperty = 123; 
     form.Class2 = new Class2(); 

     using (HttpClient client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:58814/api/"); 
      var post = await client.PostAsJsonAsync<Class1>("Values", form); 
      var putt = await client.PutAsJsonAsync<Class1>("Values", form); 
     } 
     return ""; 
    } 

meinen Code zu senden, um die Anfrage zu empfangen (der angewendete Breakpoint wird nicht getroffen)

// POST api/values 
    public void Post([FromBody]Class1 value) 
    { 

    } 

    // PUT api/values/5 
    public void Put([FromBody]Class1 value) 
    { 
    } 
+0

zu ändern, was die Definition von 'Class2' ist? –

+0

Hallo Ich habe die Definition der Klasse zwei hinzugefügt, warum konnte das einen Unterschied gemacht haben? – tony09uk

Antwort

0

Ich habe die Ausgabe dank der Beratung löse von this link - Scott Hanselman's blog

Mein Projekt Senden und Empfangen von Projekt identische Klassen hatte (einschließlich Daten Anmerkungen). Durch das Entfernen der Anmerkungen aus der Klasse im Empfängerprojekt wurde das Bindungsproblem gelöst, aber ich musste weiterhin die Eigenschaften überprüfen. Das Ändern der Annotation von "erforderlich" in "Range" löste auch das Bindungsproblem (ich erwähne nur diese, da sie einige Schritte zum Debuggen und Debuggen waren).

Die endgültige Lösung für mich war diese

public class Network 
{ 
    [Required(ErrorMessage = "NetworkID is required")] 
    public int NetworkID { get; set; } 
} 

dieser

[DataContract] 
public class Network 
{ 
    [DataMember(IsRequired = true)] 
    public int NetworkID { get; set; } 
}