2012-05-09 1 views
5

ナンシーはクエリ文字列とフォーム値をdynamic変数でハンドラに渡します。以下の例は、Nancyリクエストを介してPOSTハンドラに渡されるフォーム値を示しています。 Request.Form.xxxNancyFX:クエリ文字列/フォームの値がハンドラに正しく渡されているかどうかを確認するにはどうすればよいですか?

ハンドラ

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

あなたは、私が文字列にuseridをキャストして、値が文字列(string.IsNullOrEmpty()に相当)がnullまたは空であるかどうかを確認するために、文字列の拡張メソッドを使用していていることがわかります。

私が好むのは、ダイナミックタイプに拡張メソッドを持たせて、他に何かをする前に健全性チェックを実行できることです。私はこのようなコードをしたい:

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 
} 
関連する問題