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

编辑

使用以下评论中的信息完成回复:

如果您使用 REST 控制台的“请求参数”而不是“请求有效负载原始正文”,即使您指定application/json.

您需要将原始 JSON 粘贴到原始正文字段中,如下所示:http ://screencast.com/t/iRWZqv91

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