У нас есть Webapi, который должен иметь возможность получать данные на основе переданного пользователя. этот пользователь включает в себя домен, поэтому параметр - это что-то вроде Domain\Username
.C# WebAPI Core Backslash в маршруте
В конце концов наш API-вызовы должны выглядеть следующим образом: http://servername/api/controller/Domain\Username
или закодирован http://servername/api/controller/Domain%5CUsername
Оба URL возвращают не найдены, и контроллер не уволило (контрольная точка не попала)
Я нашел это, в котором говорится, что вы не можете напрямую передать% -Values в URL. Pass in Active Directory user name (DOMAIN\etc) in asp.net MVC URL и этот How to URL encode parameters in ASP .NET MVC. Однако, когда я передаю что-то еще, чем% 5C (например,% 20 для пробела или% 25 для% или% 92 для апострофа), он работает (точка останова и правильный результат).
Я знаю, что я мог бы использовать ?parameter=EncodedUsername
, который работает, но имя пользователя - это только одна возможность, поэтому я не хочу использовать этот способ, если это не обязательно, поскольку я не имею обратную косую черту в каждом случае.
Мой маршрут выглядит следующим образом: [HttpGet("{firstParameter}/{usernameWithDomainAndBackslash}")]
[(Пожалуйста) Прекратите использование небезопасных символов в URL-адресах] (https://perishablepress.com/stop-using-unsafe-characters-in-urls/). Почему бы не просто создать URL-адреса, чтобы использовать домен и имя пользователя в качестве отдельных заполнителей, чтобы избежать проблемы с обратным косой чертой? '[HttpGet (" {firstParameter}/{имя_пользователя}/{domain?} ")]' – NightOwl888
, к сожалению, это не решение, так как у нас есть не только имена пользователей и домены в качестве параметра, но и разные параметры поиска. Поскольку обратная косая черта является небезопасным символом, мы решили отказаться от домена, так как для нас имя пользователя достаточно велико. – nicn