我知道这已经有很多问题了 - 我很难找出哪些与版本问题有关,哪些与jQuery有关(我没有使用)等等我有MVC4 RC(4.0.20505.0),Visual Studio 2010 Ultimate SP1。
我的模型中有一个复杂类型:
public HttpResponseMessage Post([FromUri]Person person)
{
TableStorageHelper personHelper = new TableStorageHelper();
personHelper.Save(personHelper.GetTableNameForType("Person"), person);
var response = Request.CreateResponse<Person>(HttpStatusCode.Created, person);
return response;
}
我传入这个JSON字符串 - 主要使用Fiddler,但也尝试从另一个控制器中的代码(尝试在本地进行所有测试,以验证我可以获取控制器接收的对象中的值):
JSON:
{"FirstName":"Andy","LastName":"Schultz","PartitionKey":"USW","RowKey":"per-928c8f74-2efd-4fc2-a71c-fb3ea8acc6d7","NickName":null,"FullName":"Andy Schultz","Description":null,"ImageLocation":null,"Region":"USW","CommentsAboutMe":{"Comments":[]},"CommentsByMe":{"Comments":[]}}
这里的所有属性都存在于类中。
来自其他控制器的代码:
HttpWebRequest request = HttpWebRequest.Create("http://127.0.0.2:8080/api/persons/") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/json";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
Person person = new Person("Andy", "Schultz", "USW");
Formatting formatting = new Formatting();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string json = JsonConvert.SerializeObject(person, formatting, settings);
writer.Write(json);
}
每次,我在控制器中得到一个空的Person对象(我在那里的第一行调试)。每个值都为NULL。
您可能已经注意到我的控制器上的[FromUri]属性 - 我不得不这样做以解决错误,告诉我没有未定义类型的ModelBinder,但我不确定它是否正确 - 我是正如你所知道的那样,没有在Uri中传递任何信息,它在身体中。
答案 0 :(得分:0)
谢谢Mike Stall:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
[FromUri]属性确实告诉我的控制器读取uri而不是请求体查找我的控制器方法的参数。它不存在,所以一切都是空的。
添加该属性已修复的错误(表示没有为某种类型的内容Undefined定义格式化程序)是由于我不正确地声明了请求的内容类型。正确的方法是“Content-Type:text / json; charset = utf-8