Ошибка «Элемент с тем же ключом уже добавлен», когда я пытаюсь передать объект из фильтра в контроллер - PullRequest
0 голосов
/ 27 января 2020

Я хотел бы передать объект из моего фильтра контроллеру. Я покажу вам свой код:

Фильтр:

public override void OnActionExecuting(ActionExecutingContext context)
        {
            var customerRepository = context.HttpContext.RequestServices.GetService<ICustomerRepository>();

            var authHeader = context.HttpContext.Request?.Headers["Authorization"].ToString();

            if (!Int32.TryParse(authHeader, out int clientId))
            {
                context.Result = new UnauthorizedResult();
            }

            var customer = customerRepository.Get(x => x.CustomerId == clientId, typeof(Application).Name);

            if (customer == null)
            {
                context.Result = new UnauthorizedResult();
            }

            context.ActionArguments.Add("Customer", customer);
        }

Контроллер:

[Route("/api/v1.0/startup")]
[IncludeCustomerToHttpContext]
[HttpPatch]
public async Task<IActionResult> Update([FromBody] CustomerChangeViewModel viewModel, Customer customer)
{
    ...
}

Но при запуске приложения у меня появляется следующая ошибка:

System.ArgumentException: элемент с таким же ключом уже добавлен. Ключ: Клиент

Почему это происходит? Что не так?

1 Ответ

1 голос
/ 27 января 2020

ActionArguments реализует IDictionary. Вы вызываете метод Add , который может выдать ArgumentException, когда вы пытаетесь добавить пару ключ-значение в словарь, где ключ уже присутствует:

ArgumentException
Элемент с таким же ключом уже существует в IDictionary.

Если вы хотите переопределить предыдущее значение, вы можете просто присвоить значение словарю ActionArguments через индексатор.

Используйте

context.ActionArguments["Customer"] = customer;

вместо

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