mattruma mattruma - 1 year ago 100
C# Question

ASP.NET WEB API not binding to dynamic object on POST

If have the following Api Controller ... using StrutureMap for the 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();

var clientAuthenticator = new ClientAuthenticator(

Token token;
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 am make the following post:

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": "",
"Checksum": "ao4Ei77BaX1/iMZMTAJxWzt4fxc=",
"Name": "jeanlucpicard",
"Password": "master"

Any idea why my data would be null? I have tried switching to
, with no success. All the examples I have found makes me think this should work.

Here is the complete response:

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 much appreciated!


I tried just a simple example, like:

public async Task<dynamic> Post(dynamic data)
var body = await Request.Content.ReadAsStringAsync();

return data;

The parameter
is still
, but I can see the values in

Answer Source

Remove the quotes from "application/json".

Content-Type: application/json
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download