5

API コントローラの 1 つに、単一の文字列値を取る POST メソッドがあります。

public string Post([FromBody] string foo) {
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure");
}

投稿リクエストの本文を次のように使用して、これに投稿しています。

foo=123412341234

(つまり、HTTP クライアントを使用するだけでなく、ブラウザ フォームを送信することによって開始できる通常の HTTP POST です)

WebAPI のリリース候補版では、これは黙って動作を停止しました - foo をバインドしなくなりました。コードを機能させるには、メソッドを次のように置き換える必要がありました。

public string Post(FormDataCollection form) {
    var foo = form.Get("foo");
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure");
}

これは機能しますが、ちょっと面倒で、以前のバージョンよりもテストするのにかなり多くの配管が必要です。

微妙な変更を見逃したのでしょうか、それとも [FromBody] バインディング構文が非推奨になり、このかなり冗長なバインディング構文が推奨されたのでしょうか? この属性はまだありますが、RC バージョンで実際に何をするのかははっきりしていません。

4

1 に答える 1

1

実際には、「foo=123412341234」のような入力を処理できず、「=123412341234」を入力として処理するという微妙な変更があります。クライアントに後で送信させることはできますか?

そうでない場合は、以下のようにラッパー クラスを作成し、アクションに String 自体ではなく stringwrapper をパラメーターとして期待させることができます。

Class StringWrapper { public string Foo {get; 設定;} }

于 2012-06-14T22:27:10.937 に答える