У меня есть следующие классы:
QuestionnaireListDto.cs
namespace Services.DTOs
{
public class QuestionnaireListDto
{
public IList<QuestionnaireEntryDto> Questionnaires;
public QuestionnaireListDto(IList<QuestionnaireEntryDto> questionnaires)
{
Questionnaires = questionnaires;
}
}
}
QuestionnaireEntryDto.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 view.Я использую ASP.NET Core Data Protection для шифрования / дешифрования значений Id, указанных выше.
Я пытаюсь «прикрепить» зашифрованную версию свойства Id выше.API защиты данных создает строковую версию идентификатора.Я хотел бы иметь возможность сделать это без создания отдельного свойства "EncryptedId".Когда DTO создаются, я не знаю зашифрованный идентификатор на данный момент.Я также хочу, чтобы шифрование / дешифрование происходило в классе Controller, если это возможно.
Я не могу придумать чистого способа сделать это.На данный момент самое близкое, что я могу придумать, - это создать универсальный класс-обертку, который включает в себя свойство 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, который может хранить список этих универсальных объектов.Это все еще только кажется грязным / громоздким.Есть ли лучший способ?