2012-05-09 11 views
5

Nancy将我的查询字符串和值通过dynamic变量传递给我的处理程序。下面的例子显示了通过Nancy请求传递给POST处理程序的表单值,例如, Request.Form.xxxNancyFX:如何检查查询字符串/表单值是否已正确传递给我的处理程序?

处理器

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

你可以看到,我铸造userid为一个字符串,然后使用字符串扩展方法来检查,如果该值为null或空字符串(相当于string.IsNullOrEmpty())。

我更喜欢在动态类型上使用扩展方法,以便在执行任何其他操作之前执行我的理智检查。我想要这样的代码:

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

但是,您不能有dynamic类型的扩展方法。此外,您无法通过反射检查属性的存在。欢迎来到DLR。

问题

什么是执行前的检查,以确保预期的查询/表单值已经传递给我的南希处理程序最简单,最安全的方法是什么?

感谢

回答

12
Request.Form.userid.HasValue 

适用于所有DynamicDictionary成员,如表单,查询和路由参数

2

可以使用绑定即ModelBinder的到模型绑定到形式的,其中属性模型类对应于您的HTML控件名称。

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