2012-05-09 13 views
5

Nancy pasa mi secuencia de consulta y valores de formulario a mis controladores a través de una variable dynamic. El siguiente ejemplo muestra los valores de formulario que se pasan a un manejador de POST a través de la solicitud de Nancy, p. Request.Form.xxx.NancyFX: ¿Cómo puedo verificar si los valores de query-string/form se han pasado correctamente a mi controlador?

Handler

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

Se puede ver que yo echo la userid en una cadena y luego usando un método de extensión de cadena para comprobar si el valor es una cadena nula o vacía (equivalente a string.IsNullOrEmpty()).

Lo que preferiría es tener el método de extensión en el tipo dinámico para poder realizar mis verificaciones de cordura antes de hacer cualquier otra cosa. Quiero código como este:

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

Sin embargo, no se puede tener métodos de extensión para dynamic tipos. Además, no puede verificar la presencia de una propiedad a través de la reflexión. Bienvenido al DLR.

Pregunta

¿Cuál es la manera más fácil, más segura para realizar comprobaciones previas para asegurar que los valores de consulta/forma esperados se han pasado al manejador de Nancy?

Gracias

Respuesta

12
Request.Form.userid.HasValue 

Obras para todos los miembros DynamicDictionary, tales como formularios, consultas y parámetros de la ruta

2

Puede utilizar Enlazar es decir, un ModelBinder para vincular a su modelo a la forma, donde las propiedades de la la clase de modelo corresponde a sus nombres de control HTML.

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