One Solution: 我尝试将数据参数更改为复杂类型(只是具有公共属性的类),并将内容作为text / xml而不是text / plain发送,并且它按预期工作 . state参数不为null,我的数据类型为强类型对象 . 我想MVC想要为http-request体提供像XML或JSON那样的反序列化...
More Research: 我有机会再进行一些测试 . 如果帖子的主体是XML / JSON,它将首先尝试将body-object的属性映射到方法参数,如此 . 如果仍然具有未映射的属性,则它将其余属性与方法参数中任何强类型对象的属性相匹配
PostMethod(string p1, string p2, myClass obj) // if myClass has a p3 property it will be mapped from the xml body.
{
}
// xml in body of http-post
如果未映射所有参数,则它将尝试映射url参数 . 将它直接与我最初的问题联系起来 . 我现在看到的最好和最简单的解决方案是发送这样的text / xml .
PostMethod(string state, string data)
{
}
put data here
Urlencoded键/值对也可以很好地工作 .
var r = client.PostAsync(url, new StringContent("data=Something", Encoding.UTF8, "application/x-www-form-urlencoded"));
我最好的猜测是JSON和XML的键/值性质,FormEncoded帮助它映射到参数,这就是为什么它不喜欢纯字符串 .
这肯定让我很头疼,我发现MVC4文档相当稀缺(它还处于测试阶段),但我希望这可以帮助其他可能遇到同样问题的人 .