私有成员,我试图让乌里停止编码“/” 如这里解释: GETting a URL with an url-encoded slash访问从PowerShell的
但如何实现在PowerShell中的一样吗?
我试图按照访问私有财产和改变它的价值的路线,但我不能得到它的工作。
[Uri].GetProperties([System.Reflection.BindingFlags]::NonPublic)
- 返回任何
任何想法?
私有成员,我试图让乌里停止编码“/” 如这里解释: GETting a URL with an url-encoded slash访问从PowerShell的
但如何实现在PowerShell中的一样吗?
我试图按照访问私有财产和改变它的价值的路线,但我不能得到它的工作。
[Uri].GetProperties([System.Reflection.BindingFlags]::NonPublic)
- 返回任何
任何想法?
试试这个(就像在你的链接):
$uri.GetType().GetField("m_Flags", [System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
获得非公开性质:
$uri.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor `
[System.Reflection.BindingFlags]::NonPublic)
$uri.GetType().GetProperties('Instance,NonPublic')
采取任何其他职位,你需要什么,你想要这个:
$uri = [uri]"http://example.com/%2F"
$f = [uri].getfield("m_Flags", "nonpublic,instance")
$v = [int]($f.getvalue($uri))
$f.setvalue($uri, [uint64]($v -band (-bnot 0x30)))
PowerShell的-bnot
个-band
位运算符不与任何类型大于[int]
所以我向下转换到[int]
其不会溢出用于上述情况下工作(这意味着标志值超出[int]::maxvalue
不存在。)
这是工作溶液对于PowerShell的:
$uri = [Uri]"http://example.com/%2F"
# access the .PathAndQuery field to initialize the Uri object
$pathAndQuery = $uri.PathAndQuery
$flagsField = $uri.GetType().GetField("m_Flags", [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::Instance)
$flagsValue = [UInt64]$flagsField.GetValue($uri)
# remove flags Flags.PathNotCanonical and Flags.QueryNotCanonical
$flagsValue = [UInt64]($flagsValue -band (-bnot 0x30));
$flagsField.SetValue($uri, $flagsValue)
Write-Host $uri.AbsoluteUri
由于谷歌的API-dotnet的客户端path :-)请注意,存在与.NET 2.0差一些,我的代码工作> NET 2.0(用于< = 2.0版本,flagsValue
对象的类型将是[Int32]
而不是[Uint64]
)
该代码工作正常,但对Uri不起作用,不幸的是。 我得到http://0.0.0.0/myoriginalip/restofthepath(仍然由Uri解析,所以'%2F'仍然与原来的'/' 我在.net单元测试中运行相同的代码,它的工作原理很好,我不明白为什么Powershell不遵循相同的模式,如果谁有更好的运气,请告诉我 – Jammes
在进行状态的内部操作之前访问PathAndQuery非常重要。代码。 –