映射出错

来源:8-5 【应用】使用PATCH部分更新资源

慕后端2012069

2023-04-04

在按照课程代码修改并运行后,访问api发生错误图片描述
以下是我的代码,controller文件中

        public IActionResult PartiallyUpdateTouristRoute(
        [FromRoute] Guid touristRouteId,
        [FromBody] JsonPatchDocument<TouristRouteForUpdateDto> patchDocument
        )
        {
            if (!_touristRouteRepository.TouristRouteExists(touristRouteId))
            {
                return NotFound("旅游路线找不到");
            }
            //取到数据
            var touristRouteFromRepo = _touristRouteRepository.GetTouristRoute(touristRouteId);
            //打补丁
            var touristRouteToPatch = _mapper.Map<TouristRouteForUpdateDto>(touristRouteFromRepo);
            patchDocument.ApplyTo(touristRouteToPatch);

            _mapper.Map(touristRouteToPatch, touristRouteFromRepo);
            _touristRouteRepository.Save();

            return NoContent();
        }

TouristRouteProfile文件中

        public TouristRouteProfile()
        {
            CreateMap<TouristRoute, TouristRouteDto>()
                .ForMember(
                dest => dest.Price,
                opt => opt.MapFrom(src => src.OriginalPrice * (decimal)(src.DiscountPresent ?? 1))
                )
                .ForMember(
                dest => dest.TravelDays,
                opt => opt.MapFrom(src => src.TravelDays.ToString())
                )
                .ForMember(
                dest => dest.TripType,
                opt => opt.MapFrom(src => src.TripType.ToString())
                )
                .ForMember(
                dest => dest.DepartureCity,
                opt => opt.MapFrom(src => src.DepartureCity.ToString())
                );
            //处理创建资源时的dto
            CreateMap<TouristRouteForCreationDto, TouristRoute>()
                .ForMember(
                    dest => dest.Id,
                    opt => opt.MapFrom(src => Guid.NewGuid())
                );

            CreateMap<TouristRouteForUpdateDto, TouristRoute>();

            CreateMap<TouristRoute, TouristRouteForUpdateDto>();
        }

TouristRoutePictureProfile文件中

    public class TouristRoutePictureProfile:Profile
    {
        public TouristRoutePictureProfile()
        {
            CreateMap<TouristRoutePicture, TouristRoutePictureDto>();
            CreateMap<TouristRoutePictureForCreationDto, TouristRoutePicture>();
            CreateMap<TouristRoutePicture, TouristRoutePictureForCreationDto>();
        }
    }

感谢老师的解答

写回答

2回答

阿莱克斯刘

2023-04-06

请检查你的 TouristRoutePictureProfile, 我感觉你好像少了 TouristRouteForUpdateDto 与 TouristRoute 的映射关系。
0
1
阿莱克斯刘
不对,又仔细看了一下你的代码,似乎是正常的,没搞明白你的automapper为什么会报错。或者你在TouristRouteForUpdateDto 或 TouristRoute 的构造方法中设个端点,单步执行一下,看看automapper在调用构造方法的时候都干了什么?
2023-04-06
共1条回复

慕娘7348369

2024-01-19

我也遇到了这个问题,不知道你解决了吗

0
0

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

978 学习 · 547 问题

查看课程