Nancy通过dynamic
变量将查询字符串和表单值传递给我的处理程序。下面的示例显示了通过Nancy请求传递给POST处理程序的表单值,例如Request.Form.xxx
。
处理程序
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。
问题
执行预检查以确保将预期的查询/表单值传递给我的Nancy处理程序的最简单,最安全的方法是什么?
由于
答案 0 :(得分:14)
Request.Form.userid.HasValue
适用于所有DynamicDictionary成员,例如表单,查询和路由参数
答案 1 :(得分:2)
您可以使用Bind,即ModelBinder将模型绑定到表单,其中模型类的属性对应于HTML控件名称。
var course = this.Bind<Course>(); // Course is our model class
if(course != null) {
// your codes go here
}