0

デフォルトのASP.NETWebApiプロジェクトを作成する場合、デフォルトのValuesControllerには次のようなpostメソッドがあります。

// POST api/values
public void Post(string value)
{
}

私はHTTPリクエストでFilderからこのPOSTメソッドをテストしようとしていました:

POST /api/values

User-Agent: Fiddler
Host: localhost
Content-Type: application/x-www-form-urlencoded

value=abc

驚いたことに、入力パラメータabcではなくnullです。確かにベータ版では動作しましたが、RC版では何かおかしいのでしょうか、それともこのように動作しなくなったのでしょうか?

もちろん、以下に強い型のオブジェクトを作成することで回避する別の方法があります。

public Class TestDto
{
    public string Value { get; set; }
}

public void Post(TestDto testDto)
{  
}

または、Jsonを使用します。

しかし、私はこれについてもっと理解したいと思います。

4

1 に答える 1

2

(1) デフォルトでは、単純型は URI から取得されます。リクエストボディから単純型を読み取るには、[FromBody] 属性をパラメーターに追加します。(プロジェクト テンプレートの既知の問題。RTM リリースでは、プロジェクト テンプレートの ValuesController にこれが含まれます。)

(2) formurl エンコードの場合は、単純型を「value=abc」ではなく「=abc」として送信します。http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1#sending_simple_typesを参照してください。

于 2012-08-08T20:23:05.627 に答える