5

私は Web API を使い始めたばかりで、全般的に気に入っていますが、'application/x-www-form-urlencoded' を使用して POST 要求からデータを読み取るのは面倒です。これを行うためのより良い方法があるかどうかを確認したかったのです。私のアプリケーション (x-editable フォーム) は、pk、name、value の 3 つの値を持つ単純な HTTP POST 要求をコントローラーに送信します。

リクエストは次のとおりです。

POST http://localhost/XXXX.Website/api/Category/Set HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 39
Accept: */*
Origin: http://localhost
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/XXXX.Website/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: ...

name=myPropertyName&value=myTestValue&pk=1

私の ApiController の私の Action メソッドは次のとおりです。

public HttpResponseMessage PostSet(FormDataCollection set) {}

FormDataCollection からフォームの値を読み取ることはできますが、単純に書けない理由を誰かに説明してもらえますか:

public HttpResponseMessage PostSet(string name, string value, id pk) {}

それともモデルにマッピングしますか?

Web API はフォームの値からパラメーターをマップできるはずだと思っていましたか?

4

1 に答える 1

6

FromBody属性を使用してパラメーターを装飾する必要があります。しかし、それは1 つのパラメーターに対してのみ機能します。ええ、私はあなたが眉をひそめているのを感じることができます。このようなものが動作するはずです:

public HttpResponseMessage PostSet([FromBody] string name) {}

しかし、良いニュースは、属性Modelを使用してフォーム パラメータを にバインドできることです。[ModelBinder]

詳細については、この投稿をご覧ください。

于 2013-08-15T02:51:41.317 に答える