2016-12-02 52 views
1

我一直在试图弄清楚这是我们的最后一个小时,但我看不出有什么不妥的地方asp.net的WebAPI 2之后的参数总是空

的帖子是从xamarin应用程序,我正在写,用restsharp便携式客户端

POST http://192.168.30.103:8080/api/Order HTTP/1.1 
Authorization: Basic xxxx 
Content-Length: 51 
Content-Type: application/json; charset=utf-8 
Host: 192.168.30.103:8080 
Connection: Keep-Alive 
Pragma: no-cache 

{"CheckinCount":1,"EventId":16630,"OrderNo":470292} 

它正确地击中服务器邮政API,但参数始终是空

public IHttpActionResult Post([FromBody]string source) { 
     dynamic data = JsonConvert.DeserializeObject(source); 
     int checkInCount = data.CheckinCount; 
     int eventId = data.EventId; 
     int orderNo = data.OrderNo; 
     return Ok(); 
    } 

我想不通为什么...

+0

为什么你做手工反序列化,它不离开网页API? –

+0

'{“CheckinCount”:1,“EventId”:16630,“OrderNo”:470292}'不是一个字符串。这是一个对象。 –

+0

我不想为最后一分钟的API插件添加另一个DTO,但我会给它一个旋转 – Danish

回答

3

你总是发送相同的参数吗?如果是这样,你可以创建一个静态对象,而不是使用动态对象吗?就像你通过的EventRequest那样?

public class EventRequest 
{ 
    public int CheckinCount { get; set; } 
    public int EventId { get; set; } 
    public int OrderNo { get; set; } 
} 

Post动作变为:

public IHttpActionResult Post(EventRequest request) { 
    // do something with request 
    return Ok(); 
} 
+0

谢谢你的工作,但我仍然有兴趣,如果我想从身体阅读原始json,我将如何做它? – Danish

+0

只是为了我自己的笔记,如果你忘记公开的属性,它不会给你一个错误,只是一个空值的属性为空的对象。我保证永远不会复制和粘贴代码! –

0
从在短 this link

有关条目,发送其是使用在服务器端[frombody]属性被拾起简单值时,您必须在值前加上= 例如=测试值

,但它可能只是为了更好地使用JSON对象和对象绑定的API,即使是简单的值