微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何限制某些属性以从.net core中的Web API修改?

如何解决如何限制某些属性以从.net core中的Web API修改?

我正在研究.net核心Web API项目。我有两节课:

public class CategoryMasterDto : CommonInfoDto
{
    public int CategoryId { get; set; }
    [StringLength(50)]
    public string CategoryName { get; set; }
    public string CategoryImage { get; set; }
}

public class CommonInfoDto
{
    public Guid CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }
    public Guid ModifiedBy { get; set; }
    public DateTime ModifiedDate { get; set; }
    public short Status { get; set; }
}

现在,我想限制用户为Web API中的某些属性(例如CategoryId)和CommonInfoDto的所有属性指定值,因为我将在数据库中插入数据之前从我的角度指定所有这些属性

我尝试使用JsonIgnore,使用该属性在swagger等工具中不可见。但是,如果用户再次手动指定这些属性,则将在服务器端接收这些值。

例如如果我将JsonIgnore应用于CategoryId,则不会大摇大摆地看到它,但是如果用户添加了CategoryId属性并传递了一些值,它将在服务器端被接收。

我想实现两件事:

  1. 限制用户传递某些属性的值,即使传递了该值,也不应在POST和PUT请求期间将这些值绑定到服务器端的属性

  2. 我想在用户请求GET请求时传递所有属性

我已经有一个解决方案,即为GET创建一个DTO,为POST / PUT创建另一个。有没有更好的解决方案,可以使我对两者使用相同的DTO来实现自己想要的??

解决方法

您只需要一个DTO类即可进行GET,POST / PUT。并且,您可以使用AutoMapper工具来配置从模型域类到DTO类的映射,然后再返回。然后,在配置从DTO到域模型类的映射时,您可以忽略某些参数。

CreateMap<CommonInfoDto,CommonInfo>().ForMember(x => x.Guid,opt => opt.Ignore());

这意味着您将从数据库(您的域模型类)中读取数据,并将其与所有参数一起传递给DTO类;但是当您从用户(DTO类)接收数据时,在保存时将不会使用其Guid(因为在映射过程中将忽略它)。

,

每个人都在暗示。这只能使用2个类来实现。 Input.Model和Domain.Model,然后在输入过程(POST / PUT)中使用Automapper自动将属性映射到实际的Domain.Model,同时在GET端点中返回Domain.Model。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。