使用 1 个附加属性包装对象列表



我有以下类:

问卷列表Dto.cs

namespace Services.DTOs
{
public class QuestionnaireListDto
{        
public IList<QuestionnaireEntryDto> Questionnaires;
public QuestionnaireListDto(IList<QuestionnaireEntryDto> questionnaires)
{
Questionnaires = questionnaires;
}
}
}

问卷输入Dto.cs

namespace Services.DTOs
{
public class QuestionnaireEntryDto
{
// Omitting several properties here for brevity...
public int Id { get; }
public int QnreId { get; }
// Other properties here...
public QuestionnaireEntryDto(QnrsMailed qnrsMailed)
{
Id = qnrsMailed.Id;
QnreId = qnrsMailed.QnreId;
// Initialize other members...
}
}
}

这些 DTO 类由单独的库初始化。然后将这些 DTO 传递到 Razor 视图。我正在使用 ASP.NET 核心数据保护来加密/解密上面的 Id 值。

我正在尝试做的是"附加"上面 Id 属性的加密版本。数据保护 API 创建 ID 的字符串版本。我希望能够在不必创建单独的"EncryptedId"属性的情况下执行此操作。构建 DTO 时,我此时不知道加密的 ID。如果可能的话,我还希望在控制器类中进行加密/解密。

我想不出一种干净的方法来做到这一点。到目前为止,我能想到的最接近的事情是创建一个包含 EncryptedId 属性的泛型包装类,如下所示:

public class EncryptedDto<T> where T : class
{
public string EncryptedId { get; }
public T Dto { get; }
public EncryptedDto(string encryptedId, T dto)
{
EncryptedId = encryptedId
Dto = dto;
}
}

当然,要做到这一点,我必须遍历 DTO 列表,并为每个 DTO 对象构造其中一个。并且还要创建一个新的 DTO 类,该类可以改为存储这些泛型对象的列表。这仍然看起来很混乱/繁琐。有没有更好的方法?

您的解决方案没有错。重新映射 DTO 是一种常见的做法。如果你认为你的映射代码很混乱,你可以使用Automapper来做这些事情。另一种解决方法是使用静态类来委托加密/解密。每当你在视图中使用 and id 时,你都会调用该类的加密方法,以便只呈现加密的 id。

相关内容

  • 没有找到相关文章

最新更新