asp.net webapi 2 post parameter is always null

2020-04-30 02:31发布

问题:

I have been trying to figure this our for the last hour, but I can't see what's wrong with it

the post is from a xamarin app that I'm writing, using restsharp portable client

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}

It hits the server Post API correctly, but the parameter is always null

 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();
    }

I can't figure out why...

回答1:

Do you always send the same parameters? If so, could you create a static object instead of using a dynamic one? Something like an EventRequest that you pass in instead?

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

Your Post action then becomes:

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


回答2:

related entry from this link

in short, when sending simple values which are to be picked up using [frombody] attribute on the server side, you have to prefix the value with = e.g. =testValue

but its probably better just to use JSON Objects and object bindings on the API, even for simple values