2016-07-06 2 views
2

У нас есть 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}")]

+2

[(Пожалуйста) Прекратите использование небезопасных символов в URL-адресах] (https://perishablepress.com/stop-using-unsafe-characters-in-urls/). Почему бы не просто создать URL-адреса, чтобы использовать домен и имя пользователя в качестве отдельных заполнителей, чтобы избежать проблемы с обратным косой чертой? '[HttpGet (" {firstParameter}/{имя_пользователя}/{domain?} ")]' – NightOwl888

+0

, к сожалению, это не решение, так как у нас есть не только имена пользователей и домены в качестве параметра, но и разные параметры поиска. Поскольку обратная косая черта является небезопасным символом, мы решили отказаться от домена, так как для нас имя пользователя достаточно велико. – nicn

ответ

0

Попробуйте использовать DoubleEscaping для обратной косой черты.

  1. Измените web.config:

    <configuration> 
        <!-- 
        Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380 
        --> 
        <system.web> 
        <httpRuntime requestPathInvalidCharacters=""/> 
        </system.web> 
    
        <system.webServer> 
        <security> 
         <requestFiltering allowDoubleEscaping="true"></requestFiltering> 
        </security> 
        <handlers> 
         <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> 
        </handlers> 
        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> 
        </system.webServer> 
    </configuration> 
    
  2. Для /, он будет закодированный '% 252F' (% 2F ->% 252F)

  3. Отправить запрос На стороне сервера, декодировать его там.

Смежные вопросы