2017-01-23 4 views
4

Ich verwende Datenannotationen, um meine Web API 2-Modelle zu validieren. Für die grundlegende attributbasierte Validierung (Required, Range, usw.) ist es ziemlich einfach, lokalisierte Nachrichten bereitzustellen, indem benutzerdefinierte ModelMetadataProvider injiziert wird. Doch für komplexere Regeln implementieren I IValidatableObject die eine Folge von ValidationResult zurückgibt:Lokalisierung in IValidatableObject.Validate()

public class ValidationResult 
{ 
    public ValidationResult(string errorMessage); 
    public ValidationResult(string errorMessage, IEnumerable<string> memberNames); 
} 

Es sieht aus wie es keine Möglichkeit gibt ErrorMessageResourceName hier angeben. Und ich möchte meine Models nicht vom Lokalisierungsanbieter abhängig machen. Wie kann ich das Problem lösen?

+0

Ich sehe kein Problem ... Warum übergeben Sie nicht einfach eine lokalisierte Zeichenfolge im contructor.Oder, wenn Sie nur den Schlüssel übergeben möchten, verwenden Sie den aktuellen ResourceManager, um den tatsächlichen Wert zu finden ... –

Antwort

1

Es kann vorkommen, wenn die IValidatableObject.Validate-Methode aufgerufen wird, bevor die Kultur für das System verfügbar ist. Wenn die Validate-Methode manuell von der Controller-Aktion aufgerufen wird, werden die Fehlermeldungen ordnungsgemäß lokalisiert.

Wo setzen Sie die Kultur? Sie müssen es in Controller setzen> ExecuteCore. Bitte sehen Sie sich this Post oder This Beitrag kann helfen.