2

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

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

public class NewUser
{
    [Required]
    public string Username{ get; set; }
    [Required]
    public string Password{ get; set; }

    public string Salt{ get; set; }
}

在发布后(验证后)的代码中,我创建了一个盐,用于以一种方式加密密码,将它放在模型中非常有用(我知道我可以将其省略,但我宁愿不这样做)。

如果在发布时,用户添加到他们的 querystring &salt=blahblahblah,一旦页面被回发并且 MVC 匹配模型,它会blahblahblah按预期将值分配给我的模型,我没有遇到问题,因为我总是可以覆盖这个。

有什么方法可以让 MVC 不会将模型中的值分配给从回发发送的内容,因为我不希望它有可能设置其他模型中的某些值(我让我的解决方法将它们重置为应有的状态,但是如果有人想尝试破解某些值,则缺少此方法可能会导致问题)。

4

1 回答 1

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)
{
    //...
}
于 2012-06-01T11:22:50.830 回答