我有一个简单的课程:
public class Person
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("age")]
public int Age { get; set; }
}
和MVC控制器方法:
[HttpPut, Route("person/information/{Id}")]
public ActionResult UpdateInformation(int Id,Person person)
{
//some processing
}
我通过jquery-ajax调用控制器方法:
var personObj = {
name: 'SpiderMan',
age: 25
};
$.ajax({
url: '/person/information/ + $('.form').attr('id'),
data: JSON.stringify({ person: personObj }),
contentType:'application/json',
type: 'PUT',
success: function (resp) {
},
error: function (xhr) {
}
});
这适用于Chrome和Firefox。我在控制器中同时获得了Id和Person
对象。但是,在 Safari浏览器(iPhone和Mac)中,我只获得了Id,但收到的person对象中的属性为空(默认值),即人物对象未被映射。
如果我从url路由和参数中删除Id,如下所示:
[HttpPut, Route("person/information/")]
public ActionResult UpdateInformation(Person person)
{
//some processing
}
person对象与ajax请求中的数据正确映射。
第一个请求中没有映射对象的原因是什么以及如何解决这个问题?
更新:我附上了请求参数的屏幕截图 来自浏览器 Chrome :