自托管Web API - Post Param null

时间:2012-09-26 10:55:13

标签: asp.net-web-api .net-4.5

我正在尝试设置一个简单的测试来向自我托管的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

我可能错过了什么?

1 个答案:

答案 0 :(得分:2)

您需要将请求Content-Type指定为application/json

修改

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

如果您使用REST控制台的“请求参数”而不是“请求有效负载原始主体”,即使您指定application/json,它也不会从中生成JSON。

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

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