我真的没有很好的解释实际发生了什么,我希望这里有人可以解释这种行为。
首先我创建File => NewProject =>空WebApi项目。
然后我添加一个简单的控制器并在IIS上托管它。
[RoutePrefix("api")]
public class AccountController : ApiController
{
[HttpPost, Route("account")]
public async Task<IHttpActionResult> Post(dynamic command)
{
dynamic asd = command;
return Ok();
}
}
然后我用这样的fiddler点击API:
POST https://local.com/api/account HTTP/1.1
Content-Type: application/json
{"username":"user1","password":"secret","email":"email@domain.com"}
然后我在控制器内放置一个断点并使用立即窗口
command.email
'object' does not contain a definition for 'email' and no extension method 'email' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
但使用asd
实际上有效。那个怎么样?有什么想法吗?
asd.email
{email@domain.com}
base: {email@domain.com}
HasValues: false
Type: String
Value: "email@domain.com"
更多。如果我将动态更改为ExpandoObject,我会通过asd
获得我实际期望的结果:
asd.email
"email@domain.com"