events - 在 Register-ObjectEvent 操作中修改 $eventargs

标签 events powershell event-handling odata

在我的 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;

您需要将 ProxyNamespaceProxyTypeProxyEventArgs$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/

相关文章:

regex - 正则表达式以选择UNC中的最后一个文件夹

java - GWT:完成对象并删除其事件处理程序

MYSQL Event IF 然后运行查询

c++ - 当用户启动注销/关机操作时停止应用程序

powershell - 如何使用powershell创建tar gz文件

c# - 如何以正确的方式使用委托(delegate)/了解委托(delegate)

java - 有没有更好的方法来设置 JPanel 图形的初始位置?)

c# - 如何使用带有自定义路由事件的用户控件在 Caliburn Micro 中传递参数?

c# - Xamarin.Forms.Switch 在更新值时发送 Toggled 事件

powershell - 如何以对象格式获取测试集群输出?