阻止Post Request在Asp.Net Core 2.0 API中设置某些值

时间:2018-06-11 00:01:10

标签: asp.net-core asp.net-core-2.0 asp.net-core-webapi

我有一个带有Contact模型的ASP.NET Core 2.0 API,其中包含以下字段:

IDNameCompanyProfilePicFileNameEmailBirthDayPhoneNumberWorkPhoneNumberHomeAddress

POST请求允许客户端创建联系人记录。但它也可以设置IDProfilePicFileName的值,我想阻止它。

如何阻止帖子请求设置某些值(即IDProfilePicFileName)。

1 个答案:

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

在视图模型中可以映射回模型。

尽量避免将持久性模型用作数据传输对象,因为它可能泄漏不应通过网络发送的数据。它还可以公开允许发送不打算发送的其他数据的向量。

操作应该只接受明确要求的内容(显式依赖原则)。并且应该只暴露必要的东西。

这样,客户端提供的附加值无关紧要。模型绑定器仅绑定必要的值。