Модель Binding Asp.Net Core с именем пользователя - PullRequest
0 голосов
/ 07 декабря 2018

В настоящее время у меня есть общий метод в моем веб-API, который берет коллекцию и сохраняет ее в базе данных.Я добавляю имя пользователя, снова просматривая всю коллекцию и добавляя имя пользователя.

Я чувствую, что это неэффективно, и я хотел бы написать что-то общее, чтобы я мог добавить имя пользователя во время привязки модели или когда я использую autopper.Интересно, есть ли более эффективный способ сделать это, чем мой нынешний подход:

[HttpPost("collections")]
public async virtual Task<IActionResult> PostCollection([FromBody] IEnumerable<DtoPostType> dtoCollection)
{
    try
    {
        var principal = HttpContext.User.Identity as ClaimsIdentity;
        var entitiesToSave = _mapper.Map<List<T>>(dtoCollection);


        foreach (T item in entitiesToSave)
        {
            if (ModelState.IsValid)
            {
                item.CreatedUser = principal.Name;
                _repo.Create<T>(item);

            }
            else
            {
                return BadRequest(ModelState);
            }
        }

        await _repo.SaveAsync();

        return Ok();
    }

    catch (Exception exp)
    {
        _logger.LogCritical($"There was an issue with mapping for {exp}");
        return BadRequest(exp);
    }
}

1 Ответ

0 голосов
/ 08 декабря 2018

AutoMapper поддерживает , определяющий действия отображения в ASP.NET Core .Вероятно, вы можете настроить это, как показано там, и использовать что-то вроде следующего для метода Process реализации IMappingAction<>:

public void Process(DtoPostType source, EntityType destination)
{
    destination.CreatedUser = 
        (_httpContextAccessor.HttpContext.User.Identity as ClaimsIdentity)?.Name;
}

Я бы предупредил, что это может быть преждевременной оптимизацией.Это хорошее решение для обеспечения того, чтобы что-то происходило последовательно на каждой карте одинаково.Но это также может сделать код менее читаемым для кого-то, кто придет позже, так что просто помните об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...