我正在尝试设置一个简单的测试来向自我托管的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
。
我可能错过了什么?
答案 0 :(得分:2)
您需要将请求Content-Type指定为application/json
修改强>
使用以下评论中的信息完成回复:
如果您使用REST控制台的“请求参数”而不是“请求有效负载原始主体”,即使您指定application/json
,它也不会从中生成JSON。
您需要将原始JSON粘贴到原始正文字段中,如下所示:http://screencast.com/t/iRWZqv91
{
"Date": "2012.09.26",
"Command": "Hello"
}