0

在此处输入图像描述

我正在尝试以编程方式设置Use in virtual machine creation和设置。我找到了正确的方法,这是我的代码:Allow public IP creationYes

var fragment = new VirtualNetworkFragment(
    subnetOverrides: virtualNetwork.Subnets.Select(s =>
        new SubnetOverrideFragment(
            labSubnetName: s.Key,
            resourceId: s.Value.Inner.Id,
            useInVmCreationPermission: "Allow",
            usePublicIpAddressPermission: "Allow")).ToList());

var vnet = await BaseClientFactory.CreateDevTestLabClient(azureClient)
    .VirtualNetworks
    .UpdateWithHttpMessagesAsync(dbLab.ResourceGroupName, dbLab.LabId.ToString(), virtualNetworkId, fragment);

不幸的是,代码不起作用,但它也不会抛出任何异常。当我fragment对变量进行序列化以将其与在 Azure 上手动执行此操作时发送的请求进行比较时,存在细微差别。

以下是使用 NewtonsoftJson 序列化的主体在代码中的外观(我从 Watch 窗口中获取): 在此处输入图像描述

以下是通过 Azure 发送正文时的外观: 在此处输入图像描述

唯一的两个变化是我的代码生成了一个请求,allowedSubnets并且null(更重要的是,我认为)结构在我的代码生成的方式上略有不同,properties.subnetOverrides而不是正确的 json 结构。我不确定这是一个错误还是我做错了什么 - 有什么想法吗?

4

1 回答 1

1

根据我的研究,更新操作只能用于修改虚拟网络的标签,所有其他属性将被忽略。如果要修改虚拟网络的属性,请使用创建或更新操作。关于如何用c# sdk 实现Microsoft.Azure.Management.DevTestLabs,请参考以下步骤

  1. 创建服务主体并将角色分配给 sp

  2. 代码

            string clientId = " sp appId";
            string clientSecret = "sp password";
            string tenantId = "";
            string subscriptionId = "";
            var credentials = SdkContext.AzureCredentialsFactory
                .FromServicePrincipal(clientId,
                    clientSecret,
                    tenantId,
                    AzureEnvironment.AzureGlobalCloud);

            DevTestLabsClient client = new DevTestLabsClient(credentials);
            client.SubscriptionId = subscriptionId;
            VirtualNetwork vnet = await client.VirtualNetworks.GetAsync("testdevlab", "test", "Dtltest");
             // modify the vent's properties 
             vnet.SubnetOverrides = vnet.SubnetOverrides.Select(s => { s.UseInVmCreationPermission = "Allow"; s.UsePublicIpAddressPermission = "Allow"; return s; }).ToList();
            //update vnet
            var res =await client.VirtualNetworks.CreateOrUpdateAsync("testdevlab", "test", "Dtltest", vnet);


运行代码之前 在此处输入图像描述

运行代码后 在此处输入图像描述

于 2021-01-07T08:39:07.357 回答