我正在学习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
属性的情况?
答案 0 :(得分:1)
当我们希望在服务器上收到复杂属性的某些属性时,我们使用bind。这可能是出于安全或其他原因。
执行此操作时,MVC模型绑定器将使用请求参数填充user
参数的属性,您可能已经知道。但是,Bind
属性告诉模型绑定器仅填充指定名称的属性。
因此,在这种情况下,只会填充Username
,FullName
和Email
属性。所有其他人都将被忽略。
如果你有必要忽略绑定中的一个参数,你可以使用Exclude
属性:
[Exclude]
public Entity Name {get; set;}
答案 1 :(得分:1)
Bind用于增加安全性和未经授权的数据发布到服务器上。在您的模型类中,假设您还具有内容属性。如果将来不需要内容属性。那么你很难删除该属性的所有出现。在这里你可以像这样使用bind属性
POST example.com/user/transfer/
或者您只能通过包含类似
的属性来绑定要在服务器上发布的选定属性[Bind(exclude="content")]
您可以详细了解 here
第二种方法更适合编写所有属性并绑定它们,但在某些情况下,您必须绑定用户,就像您在模型中具有roles属性或IsAdmin属性那样您可能不希望该用户以某种方式发布IsAdmin或角色属性到服务器。这就是你可以使用Bind属性
的地方