在 json base64 值中添加类型和字符集

Adding type and charset in json base64 value

提问人:Winter Wind 提问时间:9/7/2023 最后编辑:Winter Wind 更新时间:9/8/2023 访问量:47

问:

我需要更改json正文响应:

{
    "id": "1581fbd2-c045-4162-9f4c-ddbca6a88d61",
    "content": "//content in base64"
    "title": "ProfileImage",
    "type": "image/jpeg",
    "created": "2023-08-03T18:55:46.736405+03:00"
}

“content”字段如下所示:

 "content": "Data: image/jpeg; Charset: utf-8;//content in base64"

有没有办法在映射配置中做到这一点?

尝试直接在控制器中添加值

 var result = await _mediaService.GetById(id);

            if (result == null)
            {
                return NotFound();
            }

            string base64Data = Convert.ToBase64String(result.Content);
            string metaInfo = string.Format("Data: {0}; Charset: {1}", result.Type, Encoding.UTF8.WebName);
            string base64String = metaInfo + Convert.ToBase64String(result.Content);

            var mapResult = _mapper.Map<MediaModelResponse>(result);

            var response = new
            {
                mapResult.Id,
                Content = base64String,
                mapResult.Title,
                mapResult.Created
            };

            return Ok(response);

它有效,但我想找到更好的解决方案

还尝试在我的模型中添加一个新字段“ContentTest”并直接写入结果

mapResult.ContentTest = base64String;
C# asp.net .NET ASP.net-core 自动映射器

评论

0赞 Mad hatter 9/7/2023
你到底不喜欢你的解决方案的什么?
0赞 Winter Wind 9/7/2023
@Madhatter idk,因为我是初学者,所以 4 我似乎还可以,但我不觉得它遵循编码标准,质量低
0赞 Mad hatter 9/7/2023
它有效,有时这才是最重要的:)如果你开始在许多地方复制你的代码,你也许可以把它移动到方法中。有没有理由不直接返回对象并实例化匿名对象?_mapper.Map<MediaModelResponse>(result);mapResultresponse
0赞 Winter Wind 9/7/2023
@Madhatter实际上我不知道如何将其移入_mapper。Map<MediaModelResponse>(结果);由于我没有那么有经验,我的主管还告诉我我的代码是垃圾;)
0赞 Mad hatter 9/7/2023
哦。非常迷人的:)显式类型、字符集和 base64 代码?

答:

1赞 Alexander 9/7/2023 #1

您可以将转换逻辑移动到配置中base64Automapper

cfg.CreateMap<MediaDto, MediaModelResponse>()
    .ForMember(i => i.Content, cfg => cfg.MapFrom((src, dest) =>
    {
        string metaInfo = string.Format("Data: {0}; Charset: {1}", src.Type, Encoding.UTF8.WebName);
        string base64String = metaInfo + Convert.ToBase64String(src.Content);

        return base64String;
    }));