首页 > 解决方案 > 使用 .NET 5 Web API(字段级访问)有条件地从 dto 中排除/包含属性

问题描述

我正在开发一个带有默认System.Text.Json模型绑定的 .NET 5 Web Api。对于几个 dto,我需要这样的东西:

public class MyDto
    {
        public string Name { get; set; }
        public string PublicDetails { get; set; }
        [IncludeForRoles("admin", "staff")]
        public string InternalDetails { get; set; }
    }

如果具有“admin”或“staff”以外的角色的用户调用返回上述 dto 的端点,则应在模型绑定上忽略属性“InternalDetails”,而不是将其添加到序列化 dto。有没有标准的方法来做到这一点?如果没有,我该如何手动实现此行为?

标签: c#asp.net-core-webapi.net-5

解决方案


有一个[JsonIgnore]属性接受一个条件,如果属性为空或默认,则忽略它们。

假设您将知道控制器中的角色,如果他们具有相关角色,则仅获取 InternalDetails 信息,如果没有,则将其保留为 null。这也减少了查询时间,因为您没有获得不需要的信息。


推荐阅读