2012-05-09 45 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 
} 
相關問題