2012-05-09 18 views
5

Nancy übergibt meine Abfrage- und Formularwerte an meine Handler über eine dynamic Variable. Das folgende Beispiel zeigt Formularwerte, die über die Nancy-Anforderung z. B. an einen POST-Handler übergeben werden. Request.Form.xxx.NancyFX: Wie überprüfe ich, ob Query-String/Form-Werte korrekt an meinen Handler übergeben wurden?

Handler

Post["/"] = _ => 
    { 
     var userId = (string) Request.Form.userid; 
     if (userId.IsEmpty()) return HttpStatusCode.UnprocessableEntity; 
     return HttpStatusCode.OK; 
    }; 

Sie können sehen, dass ich die userid in einen String am Casting und dann einen String-Extension-Methode unter Verwendung zu überprüfen, ob der Wert null oder eine leere Zeichenfolge (entspricht string.IsNullOrEmpty()) ist.

Was ich bevorzuge ist, um die Erweiterungsmethode auf dem dynamischen Typ zu haben, so dass ich meine Plausibilitätsprüfungen durchführen könnte, bevor ich irgendetwas anderes mache. Ich möchte Code wie folgt:

if(Request.Form.userid.IsEmpty()) return HttpStatusCode.UnprocessableEntity; 

jedoch nicht Erweiterungsmethoden für dynamic Typen haben können. Außerdem können Sie das Vorhandensein einer Eigenschaft nicht über Reflektion prüfen. Willkommen im DLR.

Frage

Was ist die einfachste, sicherste Weg, Vorprüfungen durchzuführen, um sicherzustellen, dass die erwarteten Abfrage/Formularwerte haben meine Nancy Handler übergeben worden?

Dank

Antwort

12
Request.Form.userid.HasValue 

Arbeiten für alle DynamicDictionary Mitglieder, wie Form, Query und Routenparameter

2

Sie Bind dh eine Modelbinder verwenden können, um Ihr Modell zu dem Formular zu binden, mit dem die Eigenschaften des Die Modellklasse entspricht Ihren HTML-Steuerelementnamen.

var course = this.Bind<Course>(); // Course is our model class 
if(course != null) { 
    // your codes go here 
}