NancyFX:如何检查查询字符串/表单值是否已经正确传递给我的处理程序?

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 处理程序?

谢谢

2个回答

14
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
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接