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 メンバーに対して機能します。

于 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 に答える