除了编写的代码较少外,还有哪些优点?它更安全吗?
public JsonResult Update (int id, string name)
{
Person person = new Person{
ID=id,
Name=name
}
SavePerson(person);
return Json(...);
}
OR
public JsonResult Update (Person person)
{
SavePerson(person);
return Json(...);
}
答案 0 :(得分:1)
使用(int id,string name)方法时,这些值可能最终会出现在URL字符串中。另一方面,它不会。所以,这可能被认为更安全。
除此之外,如果更改Person类中的可能属性,则不必更新传入(int id,string name)方法的值。虽然,您可以通过使用UpdateMethod(myPersonInstance)来解决这个问题。
答案 1 :(得分:1)
我必须不同意Nick关于以URL字符串结尾的值的概念。事实上,没有区别。试试吧!查询字符串参数可以使用任一方法提供模型值。
另一个可能很重要的区别是,当将ID和name作为参数传递时,这些是唯一可以更新的两个字段。传递Person作为参数时,可能会更新其他字段。这可能是也可能不是你想要的。但UpdateModel将接受您希望更新的属性的白名单(并且类似于在参数中绑定Person实例),所以只要您记得考虑包括白名单,就没有真正的区别在这里。
对我而言,您展示的两个选项之间的最大区别是谁实例化Person实例。当您将ID和name作为参数传递时,它将始终是您实例化Person的控制器代码。当您将Person作为参数传递时,它将始终是实例化Person的模型绑定器。如果您希望从存储库中实现现有实例,而不是实例化新的Person实例,那么这可能很重要。