2012-05-09 3 views
5

Нэнси передает мою строку запроса и формирует значения моим обработчикам через переменную dynamic. В приведенном ниже примере показаны значения формы, передаваемые в обработчик POST через запрос Nancy, например. Request.Form.xxx.NancyFX: Как проверить правильность передачи значений строки запроса/формы в мой обработчик?

Handler

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

Вы можете видеть, что я заливкой userid в строку, а затем с помощью метода расширения строки, чтобы проверить, если значение равно нулю или пустая строка (эквивалент string.IsNullOrEmpty()).

Что бы я хотел, это иметь метод расширения для динамического типа, чтобы я мог выполнять свои проверки на работоспособность перед тем, как делать что-либо еще. Я хочу, чтобы такой код:

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

Однако, вы не можете иметь методы расширения для dynamic типов. Кроме того, вы не можете проверить наличие свойства через отражение. Добро пожаловать в DLR.

Вопрос

Что это самый простой, безопасный способ выполнить предварительные проверки, чтобы убедиться, что ожидаемые значения запроса/формы были переданы в мой обработчик Нэнси?

Благодаря

ответ

12
Request.Form.userid.HasValue 

работы для всех членов DynamicDictionary, таких как формы, запроса и параметров маршрута

2

Вы можете использовать Bind т.е. ModelBinder для привязки вашей модели к форме, где от свойств класс модели соответствует вашим именам управления HTML.

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