MVC3停止客户端设置的模型值

时间:2012-06-01 11:18:17

标签: c# asp.net-mvc-3 model

这不是一个重要的问题,但绝对是一个很好的问题。

例如,我有一个看起来像这样的模型(不是为了节省阅读时间而减少一些,我确实有确认字段等:) :):

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(我有我的解决方法将它们重置为它们应该存在的内容,但如果有人想要尝试破解某些值,则错过这可能会导致问题。)

1 个答案:

答案 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)
{
    //...
}