C# 无法使用Google API更新GTM变量

C# 无法使用Google API更新GTM变量,c#,.net,google-api,oauth-2.0,google-tag-manager,C#,.net,Google Api,Oauth 2.0,Google Tag Manager,使用GTM API文档中的“Try it!”功能: 我能够从GTM获得一个包含变量的列表 但是,当我尝试更新变量()时,再次使用“try it!”,我得到: 我非常确定我正确地插入了所有参数,经过一天的尝试,我认为GTM的更新变量API有问题 有人能确认更新GTM变量对他们有效吗 我还尝试从后端执行此操作,并弹出相同的响应 这是我的密码: public void Authenticate() { string serviceAccountEmail = "xxxxxxxxxxx

使用GTM API文档中的“Try it!”功能: 我能够从GTM获得一个包含变量的列表

但是,当我尝试更新变量()时,再次使用“try it!”,我得到:

我非常确定我正确地插入了所有参数,经过一天的尝试,我认为GTM的更新变量API有问题

有人能确认更新GTM变量对他们有效吗

我还尝试从后端执行此操作,并弹出相同的响应

这是我的密码:

   public void Authenticate()
{


    string serviceAccountEmail = "xxxxxxxxxxxx@local-proj.iam.gserviceaccount.com";

    string folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage/key.p12");
    var certificate = new X509Certificate2(folder, "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(
       new ServiceAccountCredential.Initializer(serviceAccountEmail)
       {
           Scopes = new[] { TagManagerService.Scope.TagmanagerEditContainers}
       }.FromCertificate(certificate));

    // Create the service.
    var service = new TagManagerService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "My Local Proj"
    });
此时,服务已通过身份验证,因此我可以简单地执行以下操作:

var myGTMVars = service.Accounts.Containers.Variables.List("AccountID", "ContainerID").Execute();
从后端获取GTM中的所有变量。一切正常

但当我尝试更新一个时:

    Variable gTMVar = new Variable();
    gTMVar.Name = "IsAfterSignUpSuccess";
    gTMVar.Type = "c";
    var param = new Parameter()
    {
        Type = "template",
        Value = "true"
    };
    gTMVar.Parameter = new List<Parameter>();
    gTMVar.Parameter.Add(param);
    try
    {
        var newVar = service.Accounts.Containers.Variables.Update(body: gTMVar, accountId: "xxx", containerId: "xxx", variableId: "x").Execute();
    }
    catch (Exception ex)
    {

    }
变量gTMVar=新变量();
gTMVar.Name=“IsAfterSignUpSuccess”;
gTMVar.Type=“c”;
var param=新参数()
{
Type=“template”,
Value=“true”
};
gTMVar.Parameter=新列表();
gTMVar.Parameter.Add(参数);
尝试
{
var newVar=service.Accounts.Containers.Variables.Update(主体:gTMVar,accountId:“xxx”,containerId:“xxx”,variableId:“x”).Execute();
}
捕获(例外情况除外)
{
}
每次给我请求都失败了。我尝试了不同的参数,不同类型的变量,但没有任何帮助。还尝试了不同的作用域来初始化服务-没有任何帮助

关于这个主题的信息不多,尤其是对于c


我在这里发布了我的代码——希望这能挽救一些人的生命,因为在没有用户交互的情况下,从后端验证服务并不是一件简单的事。(最终证明很简单)

如果您试图更新该值,则请求中的参数必须有3个属性:
类型:您试图编辑的类型,
键:值,
价值:你的价值

网址:
参数:

{
  "name":"YOUR_VARIABLE_NAME",
  "type":"YOUR_VARIABLE_TYPE", 
  "parameter":[{
      "type":"YOUR_TYPE",
      "key":"value",
      "value":"YOUR_VALUE"
   }]
}
TagManagerAPI的文档中有一些遗漏,并且几乎没有可用的帮助。 大多数指南都关注GUI,Simo Ahava在他的示例中主要使用Python

最好的,
Cika

你解决了这个问题吗?我在awct标签上也遇到了类似的问题,虽然每个设置和参数都完全正确,但它仍然返回400个错误请求,在自定义html中效果很好,我完全复制了字典中建议的设置,但似乎没有任何效果。我最终放弃了此集成,据我所知,它主要用于管理容器本身,而不是从后端处理事件或其他内容。
{
  "name":"YOUR_VARIABLE_NAME",
  "type":"YOUR_VARIABLE_TYPE", 
  "parameter":[{
      "type":"YOUR_TYPE",
      "key":"value",
      "value":"YOUR_VALUE"
   }]
}