You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单个ID的Hotel GET接口正常,列表GET接口报AutoMapper映射异常

问题分析:单个Hotel查询正常,列表查询触发AutoMapper映射异常

开发的HTTPS GET接口中,根据ID查询单个Hotel的方法运行正常,但返回Hotel列表的方法抛出AutoMapper映射异常。

控制器代码

// GET: api/Hotels
[HttpGet]
public async Task<ActionResult<IEnumerable<HotelDto>>> GetHotels()
{
    var hotels = _hotelsRepository.GetAllAsync();
    return Ok(_mapper.Map<List<HotelDto>>(hotels));
}

// GET: api/Hotels/5
[HttpGet("{id}")]
public async Task<ActionResult<HotelDto>> GetHotel(int id)
{
    var hotel = await _hotelsRepository.GetAsync(id);

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

    return Ok(_mapper.Map<HotelDto>(hotel));
}

AutoMapper配置

public MapperConfig()
{
    CreateMap<Country, CreateCountryDto>().ReverseMap();
    CreateMap<Country, GetCountriesDto>().ReverseMap();
    CreateMap<Country, GetCountryDto>().ReverseMap();
    CreateMap<Country, UpdateCountryDto>().ReverseMap();

    CreateMap<Hotel, HotelDto>().ReverseMap();
    CreateMap<Hotel, CreateHotelDto>().ReverseMap();
}

错误响应详情

AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types:
AsyncStateMachineBox`1 -> List`1
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[[System.Collections.Generic.List`1[[HotelListing.API.Data.Hotel, HotelListing.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[HotelListing.API.Repository.GenericRepository`1+<GetAllAsync>d__4[[HotelListing.API.Data.Hotel, HotelListing.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], HotelListing.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.List`1[[HotelListing.API.Models.Hotels.HotelDto, HotelListing.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

问题原因

GetHotels方法中调用_hotelsRepository.GetAllAsync()时未添加await关键字,导致hotels变量的实际类型是Task<List<Hotel>>,而非预期的List<Hotel>。AutoMapper没有配置从Task<T>到List<HotelDto>的映射规则,因此触发映射异常。

而单个查询的GetHotel方法正确使用await获取到了实际的Hotel对象,所以能正常完成映射。

解决方案

在GetHotels方法中为GetAllAsync()添加await,获取到实际的酒店列表后再执行映射:

// GET: api/Hotels
[HttpGet]
public async Task<ActionResult<IEnumerable<HotelDto>>> GetHotels()
{
    var hotels = await _hotelsRepository.GetAllAsync();
    return Ok(_mapper.Map<List<HotelDto>>(hotels));
}

内容的提问来源于stack exchange,提问作者untitiledunmastered

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:33:30