Asp.net core 防止Post请求在Asp.Net Core 2.0 API中设置某些值
我有一个ASP.NET Core 2.0 API,带有带有以下字段的联系人模型:Asp.net core 防止Post请求在Asp.Net Core 2.0 API中设置某些值,asp.net-core,asp.net-core-2.0,asp.net-core-webapi,Asp.net Core,Asp.net Core 2.0,Asp.net Core Webapi,我有一个ASP.NET Core 2.0 API,带有带有以下字段的联系人模型: ID,Name,公司,档案文件名,电子邮件,生日,电话号码工作,电话号码姓名,地址 POST请求允许客户端创建联系人记录。但是它也可以设置ID和ProfilePicFileName的值,这是我想要阻止的 如何防止post请求设置某些值(即ID和ProfilePicFileName) 如何防止post请求设置某些值(即ID和ProfilePicFileName) 通过创建特定于相关操作的模型,排除不需要的属性 pub
ID
,Name
,公司
,档案文件名
,电子邮件
,生日
,电话号码工作
,电话号码姓名
,地址
POST请求允许客户端创建联系人记录。但是它也可以设置ID
和ProfilePicFileName
的值,这是我想要阻止的
如何防止post请求设置某些值(即ID
和ProfilePicFileName
)
如何防止post请求设置某些值(即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) {
//...
}
在动作中,视图模型可以映射回模型
尽量避免将持久性模型用作数据传输对象,因为它可能会泄漏本来不打算通过网络发送的数据。它还可以公开允许发送不打算发送的附加数据的向量
操作应该只接受显式要求的内容(显式依赖原则)。应该只揭露必要的东西
这样,客户机提供的附加值并不重要。模型活页夹将只绑定必要的值。谢谢。你能详细说明为什么我应该避免使用模型a数据传输对象吗?@MatiasMiraglio例如,如果你使用的是实体框架,并且你有外键,那么它可能会有不必要的行为,比如在请求时向客户端发送什么数据。以及您当前遇到的问题。请求联系人记录时,我确实希望向客户端提供所有数据,包括ID。在这种情况下使用contact类可以吗?或者我应该创建一个与联系人模型相同的contactViewModel吗?@MatiasMiraglio你可能会觉得安全。但那将是一个选择的问题,也是一个选择的问题。你仍然可以把它们看作模型。创建一个模型文件夹并将其保存在那里。