我有一个带有Contact模型的ASP.NET Core 2.0 API,其中包含以下字段:
ID
,Name
,Company
,ProfilePicFileName
,Email
,BirthDay
,PhoneNumberWork
,PhoneNumberHome
,Address
。
POST请求允许客户端创建联系人记录。但它也可以设置ID
和ProfilePicFileName
的值,我想阻止它。
如何阻止帖子请求设置某些值(即ID
和ProfilePicFileName
)。
答案 0 :(得分:2)
如何阻止帖子请求设置某些值(即ID和ProfilePicFileName)。
通过创建特定于相关操作的模型来排除不需要的属性。
public class ContactViewModel {
public string Name { get; set; }
public string Company { get; set; }
public string Email { get; set; }
public DateTime BirthDay { get; set; }
public string PhoneNumberWork { get; set; }
public string PhoneNumberHome { get; set; }
public string Address { get; set; }
}
这样,动作将只具有模型绑定器填充的所需属性
[HttpPost]
public IActionResult Post([FromBody]ContactViewModel contact) {
//...
}
在视图模型中可以映射回模型。
尽量避免将持久性模型用作数据传输对象,因为它可能泄漏不应通过网络发送的数据。它还可以公开允许发送不打算发送的其他数据的向量。
操作应该只接受明确要求的内容(显式依赖原则)。并且应该只暴露必要的东西。
这样,客户端提供的附加值无关紧要。模型绑定器仅绑定必要的值。