'Отсутствует конфигурация карты типов или неподдерживаемое отображение.' Automapperexception в ASP. NET Core WebApi - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь добавить AutoMapper в API (созданный с использованием ASP. NET Core 3), но он дает мне исключение «Конфигурация карты отсутствующего типа или неподдерживаемое отображение.» - исключение, и мой поиск в Google не выполняет мне вообще не поможет ... :).

Исключение выдается (как описано ниже) в методе "GetAllObject1"

Это мои текущие настройки:

    [HttpGet]
public IActionResult GetAllObject1()
{
    var object1Items = _myService.GetAllObject1();

    Object1ViewModel ouViewModel = _mapper.Map<Object1ViewModel>(Object1Items); // <= This line gives the exception above!!

    return Ok(ouViewModel);
}



 "AutoMapping.cs":

namespace DataAccess.AutoMapper
{
    public class AutoMapping : Profile
    {
        public AutoMapping()
        {
            CreateMap < KollOrganizationalUnit, KollOrganizationalUnitViewModel>();

        }
    }
}

"Startup.cs":

public virtual void ConfigureServices(IServiceCollection services)
{
    if (services == null)
        throw new ArgumentNullException(nameof(services));

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

    services.AddControllers()
        .AddNewtonsoftJson(options =>
        {
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        })
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.IgnoreNullValues = true;
        });

        services.AddDbContext<RepositoryContext>(opts => opts.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        services.RegisterDAL();

        services.RegisterBizServices();

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "API",
                Description = "Integration API for XXX",
                TermsOfService = new Uri("https://www.xxx.se/terms-of-service"),
                Contact = new OpenApiContact()
                {
                    Name = "Integrationcontact",
                    Email = "integration@xxx.se",
                    Url = new Uri("https://www.xxx.se")
                },
            });
        });

        services.AddAutoMapper(typeof(Startup).Assembly);
}

Я что-то упускаю здесь чего-то отвратительного?

1 Ответ

0 голосов
/ 20 марта 2020

Трудно сказать, не зная тип возврата _myService.GetAllObject1(), но кажется, что он возвращает коллекцию из Object1Unit. Если это так, вы можете попробовать что-то вроде:

IEnumerable<Object1ViewModel> ouViewModels = Object1Items.Select(x => _mapper.Map<Object1ViewModel>(x));
return Ok(ouViewModels);

Если вы пытаетесь сопоставить коллекцию с одним элементом, вы должны указать AutoMapper, как это сделать, или вы получите исключение, которое вы вы видите (ваш класс AutoMapping создает карту только из одного элемента в один элемент).

...