Simple post to Web Api
It's been quite sometime since I asked this question. Now I understand it more clearly, I'm going to put a more complete answer to help others.
In Web API, it's very simple to remember how parameter binding is happening.
- if you
POST
simple types, Web API tries to bind it from the URL if you
POST
complex type, Web API tries to bind it from the body of the request (this uses amedia-type
formatter).-
If you want to bind a complex type from the URL, you'll use
[FromUri]
in your action parameter. The limitation of this is down to how long your data going to be and if it exceeds the url character limit.public IHttpActionResult Put([FromUri] ViewModel data) { ... }
-
If you want to bind a simple type from the request body, you'll use [FromBody] in your action parameter.
public IHttpActionResult Put([FromBody] string name) { ... }
as a side note, say you are making a PUT
request (just a string) to update something. If you decide not to append it to the URL and pass as a complex type with just one property in the model, then the data
parameter in jQuery ajax will look something like below. The object you pass to data parameter has only one property with empty property name.
var myName = 'ABC';
$.ajax({url:.., data: {'': myName}});
and your web api action will look something like below.
public IHttpActionResult Put([FromBody] string name){ ... }
This asp.net page explains it all. http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api