7

Nancy 通过一个dynamic变量将我的查询字符串和表单值传递给我的处理程序。下面的示例显示了通过 Nancy 请求传递给 POST 处理程序的表单值,例如Request.Form.xxx

处理程序

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。

问题

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

谢谢

4

2 回答 2

14
Request.Form.userid.HasValue

适用于所有 DynamicDictionary 成员,例如 Form、Query 和路由参数

于 2012-05-09T09:18:33.647 回答
2

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

var course = this.Bind<Course>(); // Course is our model class 
if(course != null) {
    // your codes go here
} 
于 2012-07-13T23:29:20.837 回答