如何在Powershell中使用反射来更改HttpWebRequest标头?

时间:2015-04-13 18:26:52

标签: c# .net powershell reflection

我需要使用受.NET限制的Powershell(v2)创建带有特定标头的HttpWebRequest。我读了另一个post,这是用C#完成的,但是我遇到了在Powershell中完成相同目标的困难

到目前为止,这是基于以上链接的内容:

$httpWebRequest = [System.Net.HttpWebRequest][System.Net.WebRequest]::Create($url)
[System.Reflection.BindingFlags]$bflags = [Reflection.BindingFlags]"NonPublic" -bor [Reflection.BindingFlags]"Instance" -bor [Reflection.BindingFlags]"InvokeMethod"
$httpWebRequest.Headers.GetType().InvokeMember("ChangeInternal", $bflags, $null, $httpWebRequest.Headers, @{"Host" = "www.example.com"})

不幸的是,Powershell的错误响应如下:

  

使用“5”参数调用“InvokeMember”的异常:“找不到方法'System.Net.WebHeaderCollection.ChangeInternal'。”

我该如何调用“ChangeInternal”?我得到的错误是否与错误的汇编版本有关?

1 个答案:

答案 0 :(得分:0)

InvokeMember的最后一个参数是一个参数数组,ChangeInternal有两个参数,即名称和值。发生错误是因为反射无法找到名为ChangedMember的方法接受单个参数。使用此:

$httpWebRequest.Headers.GetType().InvokeMember("ChangeInternal", $bflags, $null, $httpWebRequest.Headers, @("Host", "www.example.com"))