Не думаю, что вы сможете использовать RedirectToAction так, как хотели бы. Проблема в том, что он всегда будет URL-кодировать ваши параметры.
Я думаю, вам придется обрабатывать строку запроса самостоятельно. Я предлагаю использовать Url.Action () для генерации базового URL, так как он работает почти так же, как RedirectToAction, но возвращает строку. И тогда вам придется сгенерировать строку запроса самостоятельно. Пожалуйста, не забудьте использовать Url.Encode () для каждого элемента строки запроса.
У меня также есть предположение, что вы можете выполнить то, что хотели бы, по пользовательскому маршруту. Я не эксперт в этом, но я видел кое-что об использовании регулярных выражений в маршрутах, и это может быть чем-то стоящим.
Редактировать: я придумал более простой способ делать то, что вы хотите. Вместо того, чтобы вручную добавлять знаки плюс, просто создайте полный правильный URL-адрес с помощью Url.Action (), а затем замените все экземпляры% 20 знаком плюс. Затем перенаправьте на этот URL. Как:
string newUrl = Url.Action("Search", new { query = query });
string plussedUrl = newUrl.Replace("%20", "+");
return new RedirectResult(plussedUrl);