在我的 PowerShell 脚本中,我尝试在 ODataServices 客户端请求中插入请求 header 。我正在使用 Register-ObjectEvent 来做到这一点。这种技术在 .NET 中运行良好,但由于某种原因在 PowerShell 中不起作用,我怀疑 PS 提供了对 $EventArgs 的不同访问
$proxy = New-ODataServiceProxy "http://localhost.:50055/Service/"
$addAuthenticationHeader =
{
$EventArgs.RequestHeaders.Add("X-Authorization", "Y2xhcmsua2VudEBzdXBlci5jb206c3VwZXJtYW46bWFpbg==")
}
Register-ObjectEvent -InputObject $proxy -EventName "SendingRequest" -Action $addAuthenticationHeader
$topic = New-Object -TypeName "MyServer.Entities.Topic"
$topic.Name = "hola from PS"
$topic.About = "about"
$proxy.AddObject("Topics", $topic)
$proxy.SaveChanges()
当请求在 SaveData 上发出时,它没有添加的 header 。有什么建议吗?
最佳答案
我遇到了同样的问题,我在 $EventArgs
上修改的属性似乎没有效果。我不太清楚细节,但是当您使用 Register-ObjectEvent
的 -Action
参数时,它会创建一个 PSEventJob
运行您的事件处理程序/ScriptBlock
。由于 $addAuthenticationHeader
正在 Job
中运行,我怀疑传递给它的 EventArgs
对象与事件所在的对象不同引发,因此源对象永远不会看到您所做的更改。
作为解决方法,我使用了 Add-Type
cmdlet定义一个 C# 类来进行事件处理。我不熟悉您正在使用的 API,但它看起来像这样:
Add-Type -TypeDefinition @"
using System;
using ProxyNamespace;
namespace StackOverflow
{
public static class ProxyHelper
{
public static void RegisterSendingRequest(ProxyType proxy)
{
proxy.SendingRequest += Proxy_SendingRequest;
}
private static void Proxy_SendingRequest(object sender, ProxyEventArgs e)
{
e.RequestHeaders.Add(
"X-Authorization",
"Y2xhcmsua2VudEBzdXBlci5jb206c3VwZXJtYW46bWFpbg=="
);
}
}
}
"@ -ReferencedAssemblies $ProxyAssemblyPath;
您需要将 ProxyNamespace
、ProxyType
、ProxyEventArgs
和 $ProxyAssemblyPath
替换为适当的值,然后只需替换这个...
$addAuthenticationHeader =
{
$EventArgs.RequestHeaders.Add("X-Authorization", "Y2xhcmsua2VudEBzdXBlci5jb206c3VwZXJtYW46bWFpbg==")
}
Register-ObjectEvent -InputObject $proxy -EventName "SendingRequest" -Action $addAuthenticationHeader
...有了这个...
[StackOverflow.ProxyHelper]::RegisterSendingRequest($proxy);
关于events - 在 Register-ObjectEvent 操作中修改 $eventargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735777/