Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 防止Post请求在Asp.Net Core 2.0 API中设置某些值_Asp.net Core_Asp.net Core 2.0_Asp.net Core Webapi - Fatal编程技术网

Asp.net core 防止Post请求在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

我有一个ASP.NET Core 2.0 API,带有带有以下字段的联系人模型:

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你可能会觉得安全。但那将是一个选择的问题,也是一个选择的问题。你仍然可以把它们看作模型。创建一个模型文件夹并将其保存在那里。