何时使用BindAttribute?

时间:2017-07-22 15:51:45

标签: asp.net asp.net-mvc

我正在学习asp.net mvc并想知道我们何时需要使用BindAttribute

第一种情况(使用Bind):

型号:

public class Book
{
    public string Id { get; set; }

    public string Name { get; set; }

    public string Author { get; set; }
}

控制器:

public IActionResult Create([Bind(nameof(Book.Name), nameof(Book.Author))] Book model)
{
    return Ok();
}

书籍Id将在服务器端生成。所以,客户端与它无关,每个动作都试图改变/使id被阻止。

第二种情况(不使用Bind):

型号:

public class BookViewModel
{
    public string Name { get; set; }

    public string Author { get; set; }
}

控制器:

public IActionResult Create(BookViewModel model)
{
    return Ok();
}

由于第二个模型不包含Id属性,因此我们无需阻止创建或更改。

我更喜欢第二个。管理模型很容易。

是否有must使用Bind属性的情况?

2 个答案:

答案 0 :(得分:1)

当我们希望在服务器上收到复杂属性的某些属性时,我们使用bind。这可能是出于安全或其他原因。

执行此操作时,MVC模型绑定器将使用请求参数填充user参数的属性,您可能已经知道。但是,Bind属性告诉模型绑定器填充指定名称的属性。

因此,在这种情况下,只会填充UsernameFullNameEmail属性。所有其他人都将被忽略。

请点击此处了解详情:http://ittecture.wordpress.com/2009/05/01/tip-of-the-day-199-asp-net-mvc-defining-model-binding-explicitly/

如果你有必要忽略绑定中的一个参数,你可以使用Exclude属性:

[Exclude] 
public Entity Name {get; set;}

答案 1 :(得分:1)

Bind用于增加安全性和未经授权的数据发布到服务器上。在您的模型类中,假设您还具有内容属性。如果将来不需要内容属性。那么你很难删除该属性的所有出现。在这里你可以像这样使用bind属性

POST example.com/user/transfer/

或者您只能通过包含类似

的属性来绑定要在服务器上发布的选定属性
[Bind(exclude="content")] 

您可以详细了解 here

第二种方法更适合编写所有属性并绑定它们,但在某些情况下,您必须绑定用户,就像您在模型中具有roles属性或IsAdmin属性那样您可能不希望该用户以某种方式发布IsAdmin或角色属性到服务器。这就是你可以使用Bind属性

的地方