2017-04-06 64 views
3

我想調用一個REST API傳遞一個包含反斜槓字符的參數。Invoke-RestMethod將反斜槓轉換爲斜槓

API需要一個類似api/test/<app_name>/<user_name>的路由,例如我想通過domain\login作爲user_name的值。

我試圖與PowerShell的:

$uri = [Uri]::EscapeUriString("http://localhost:5555/api/test/App Name/Domain\login") 
# now $uri = 'http://localhost:5555/api/test/App%20Name/Domain%5Clogin' 
Invoke-RestMethod -Method Get -Uri $uri -Verbose 

Invoke-RestMethod-Verbose標誌輸出顯示的PowerShell 是反斜槓轉換成斜線,之後我從REST API 404(這是意料之中的,因爲路線不匹配):

VERBOSE: GET http://localhost:5555/api/test/App Name/Domain/login with 0-byte payload 
Invoke-RestMethod : 
404 Not Found 

我怎樣才能避免這種行爲,使用的路徑與編碼的反斜線?

這裏是我的$PSVersionTable變量的輸出:

> $PSVersionTable 

Name       Value 
----       ----- 
PSVersion      5.1.14393.953 
PSEdition      Desktop 
PSCompatibleVersions   {1.0, 2.0, 3.0, 4.0...} 
BuildVersion     10.0.14393.953 
CLRVersion      4.0.30319.42000 
WSManStackVersion    3.0 
PSRemotingProtocolVersion  2.3 
SerializationVersion   1.1.0.1 
+0

有趣。可以在windows上重現這100%。在CentOS上,\轉換爲'/',但%5C'保持爲'%5C' ... – Clijsters

+0

是的,奇怪的是我明確地逃避它,它仍然被替換。 –

+0

您使用的是什麼版本的PowerShell?我正在使用5.1,而我的詳細輸出爲'VERBOSE:GET http:// localhost:5555/api/test/App Name/Domain%5Clogin with 0-byte payload',這表明它保留了反斜槓。 – Robin

回答

0

我應該一句話:更換/// 也許你必須把它定義爲普通字符串,然後將其轉換:

$RawUri = 'http://...' 

在這裏您應該使用//而不是/

然後使用您的代碼並用新變量替換文本。