If you have the following Api Controller ... using StrutureMap for DI ...
using System; using System.Dynamic; using System.Net; using System.Net.Http; using System.Web.Http; using IdentityService.Domain; using IdentityService.Domain.Contracts; using IdentityService.Domain.Models; namespace IdentityService.Controllers { public class AccountController : ApiController { private readonly IRepository<Client> _clientRepository; private readonly IRepository<RelyingParty> _relyingPartyRepository; private readonly IRepository<Token> _tokenRepository; public AccountController( IRepository<Client> clientRepository, IRepository<RelyingParty> relyingPartyRepository, IRepository<Token> tokenRepository) { _clientRepository = clientRepository; _relyingPartyRepository = relyingPartyRepository; _tokenRepository = tokenRepository; } public HttpResponseMessage Post( [FromBody] dynamic data) { dynamic result = new ExpandoObject(); try { var clientAuthenticator = new ClientAuthenticator( _clientRepository, _relyingPartyRepository, _tokenRepository); Token token; clientAuthenticator.Authenticate( data.Key, data.ChecksumValue, data.Checksum, data.Name, data.Password, out token); result.Token = token; } catch (Exception ex) { result.ErrorCode = ex.GetType().ToString(); result.ErrorMessage = ex.GetBaseException().Message; } return this.Request.CreateResponse(HttpStatusCode.OK, (ExpandoObject)result); } } }
Using Fiddler, I make the following message:
POST http://localhost:54029/api/account HTTP/1.1 User-Agent: Fiddler Host: localhost:54029 Content-Type: "application/json" Content-Length: 218 { "Key": "7d42276d3c3954716c672543385b575836472f5d543d7776205627413a", "ChecksumValue": "127.0.0.1", "Checksum": "ao4Ei77BaX1/iMZMTAJxWzt4fxc=", "Name": "jeanlucpicard", "Password": "master" }
Any idea why my data will be blank? I tried switching to JObject , without success. All the examples I found make me think this should work.
Here is the complete answer:
HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcY29kZS1tYXR0cnVtYVx0YWxrLWF1dGhlbnRpY2F0aW9uLXNlcnZlclxJZGVudGl0eVNlcnZpY2VcYXBpXGFjY291bnQ=?= X-Powered-By: ASP.NET Date: Mon, 27 May 2013 13:59:45 GMT Content-Length: 137 {"ErrorCode":"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException","ErrorMessage":"Cannot perform runtime binding on a null reference"}
Any help would be greatly appreciated!
Update
I tried just a simple example, for example:
public async Task<dynamic> Post(dynamic data) { var body = await Request.Content.ReadAsStringAsync(); return data; }
The data parameter is still null , but I see the values ββin body .