0

自己ホスト Web-API サーバーに POST 要求を行うための簡単なテストをセットアップしようとしています。

var config = new HttpSelfHostConfiguration(new Uri(baseAddress));

// add a route
config.Routes.MapHttpRoute(name: "DefaultApi",
                            routeTemplate: "api/{controller}/{id}",
                            defaults: new { id = RouteParameter.Optional }
);

server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();

コントローラーを追加しました:

public class PayloadController : ApiController
{    
    public string Get()
    {
        return "Hello from GET";
    }

    public HttpResponseMessage PostItem(Payload payload)
    {
        // payload 
        //...
    }
}

そして、対応するモデルがあります(プロパティが含まれていることを確認してください):

public class Payload
    {
        public string Date { get; set; }
        public string Command { get; set; }
    }

Chrome で Rest Console を使用してサーバーをテストし、コントローラーで GET の正しい結果を取得しています。

次のリクエストを POST として発行します。

Request Url: http://localhost:8080/api/payload
Request Method: POST

Params: {
    "Date": "2012.09.26",
    "Command": "Hello"
}

編集: Content-Type はapplication/jsonに設定され、エンコーディングはUTF-8に設定されます

コントローラーでブレークポイントを設定すると、POST パラメーターがPaylodオブジェクトに正しく逆シリアル化されていないことが示されます。パラメーターはnullです。

何が欠けている可能性がありますか?

4

1 に答える 1

3

リクエストの Content-Type を次のように指定する必要がありますapplication/json

編集

以下のコメントからの情報を含む完全な応答:

「リクエスト ペイロードの raw ボディ」ではなく、REST コンソールの「リクエスト パラメータ」を使用している場合、 を指定しても、それらから JSON が生成されませんapplication/json

次のように、未加工の JSON を未加工の body フィールドに貼り付ける必要があります: http://screencast.com/t/iRWZqv91

{
    "Date": "2012.09.26",
    "Command": "Hello"
}
于 2012-09-26T11:08:09.583 に答える