这不是一个重要的问题,但绝对是一个很好的问题。
例如,我有一个看起来像这样的模型(不是为了节省阅读时间而减少一些,我确实有确认字段等:) :):
public class NewUser
{
[Required]
public string Username{ get; set; }
[Required]
public string Password{ get; set; }
public string Salt{ get; set; }
}
在我的代码发布后(验证后)我创建了一个用于单向加密密码的盐,在模型中使用它非常有用(我知道我可以把它留在外面,但我宁愿不)。
如果在帖子上,用户添加了他们的查询字符串&salt=blahblahblah
,一旦页面回发并且MVC匹配模型,它就会按预期为我的模型分配值blahblahblah
,我没有遇到任何问题,因为我总是可以覆盖它。
有没有办法可以让一个属性让MVC不会将模型中的值分配给从回发发送的内容,因为在其他模型中有一些我不希望它有可能的值set(我有我的解决方法将它们重置为它们应该存在的内容,但如果有人想要尝试破解某些值,则错过这可能会导致问题。)
答案 0 :(得分:5)
您可以在模型绑定期间使用BindAttribute到白名单/黑名单属性:
您可以在全球范围内在模型级别应用它:
[Bind(Exclude="Salt")]
public class NewUser
{
[Required]
public string Username{ get; set; }
[Required]
public string Password{ get; set; }
public string Salt{ get; set; }
}
或在单个控制器操作级别:
public ActionResult MyAction([Bind(Exclude="Salt")] NewUser user)
{
//...
}