Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Azure RM API检测子域是否可用?_C#_Azure_Azure Resource Manager_Azure Sdk .net - Fatal编程技术网

C# 如何使用Azure RM API检测子域是否可用?

C# 如何使用Azure RM API检测子域是否可用?,c#,azure,azure-resource-manager,azure-sdk-.net,C#,Azure,Azure Resource Manager,Azure Sdk .net,在旧世界(在Azure RM API之前),我们可以轻松检测子域可用性,如下所示: public async Task<HostedServiceCheckNameAvailabilityResponse> CheckNameAvailability(string name) { using (var client = new ComputeManagementClient(await subscription.GetAuthToken())) { r

在旧世界(在Azure RM API之前),我们可以轻松检测子域可用性,如下所示:

public async Task<HostedServiceCheckNameAvailabilityResponse> CheckNameAvailability(string name)
{
    using (var client = new ComputeManagementClient(await subscription.GetAuthToken()))
    {
        return await client.HostedServices.CheckNameAvailabilityAsync(name);
    }
}
公共异步任务检查名称可用性(字符串名称)
{
使用(var client=new ComputeManagementClient(wait subscription.GetAuthToken()))
{
返回Wait client.HostedServices.CheckNameAvailabilitySync(名称);
}
}
这将告诉您子域是否可用,并且它工作得很好

在Azure RM中,我还没有找到任何类似的方法——我写了下面的方法作为最后的手段——但这是一个可怕的黑客——而且启动速度很慢;如果子域已经存在,它只需要3到4秒告诉你,但是如果它不存在,它可能需要25秒来运行。。。(创建和删除IP每次大约需要10-12秒),这真的很糟糕

public static async Task<bool> IsSubDomainAvailable
(
    IAzure azure, 
    string region, 
    string subDomain
)
{
    // TODO: This is a bit of a hack, but it's the only way we've found in the RM
    //       model to test for subdomain availability.

    var rgName = $"dnstest{Guid.NewGuid()}".ToLower().Replace("-", string.Empty);
    var resourceGroup = await azure.ResourceGroups.Define(rgName)
        .WithRegion(region)
        .CreateAsync();

    try
    {
        var ipAddy = await azure.PublicIPAddresses.Define("dnstest")
            .WithRegion(region)
            .WithExistingResourceGroup(rgName)
            .WithLeafDomainLabel(subDomain)
            .CreateAsync();

        await azure.PublicIPAddresses.DeleteByIdAsync(ipAddy.Id);

        return true;
    }
    catch (CloudException cEx)
    {
        if (cEx.Response.StatusCode == HttpStatusCode.BadRequest
            && cEx.Message.ToUpperInvariant().Contains("ALREADY USED"))
        {
            return false;
        }

        throw;
    }
    finally
    {
        await azure.ResourceGroups.BeginDeleteByNameAsync(rgName);
    }
}
公共静态异步任务IsubDomainAvailable
(
IAzure,
弦区,
字符串子域
)
{
//托多:这有点像黑客,但这是我们在RM中找到的唯一方法
//用于测试子域可用性的模型。
var rgName=$“dnstest{Guid.NewGuid()}”.ToLower().Replace(“-”,string.Empty);
var resourceGroup=await azure.ResourceGroups.Define(rgName)
.WithRegion(地区)
.CreateAsync();
尝试
{
var ipAddy=await azure.publicipaddress.Define(“dnstest”)
.WithRegion(地区)
.WithExistingResourceGroup(rgName)
.WithLeafDomainLabel(子域)
.CreateAsync();
等待azure.PublicIPAddresss.DeleteByIdAsync(ipAddy.Id);
返回true;
}
捕获(CloudException cEx)
{
如果(cEx.Response.StatusCode==HttpStatusCode.BadRequest
&&cEx.Message.toupper不变量().Contains(“已使用”))
{
返回false;
}
投掷;
}
最后
{
等待azure.ResourceGroups.BeginDeleteByNameAsync(rgName);
}
}
因此,我的问题是,是否有更好/更直接的方法使用Azure RM API检查子域可用性?

所以我的问题是,有没有更好/更直接的方法来检查子域可用性,使用Azure RM API

我们可以使用NetworkManagementClient检查子域的可用性,下面是演示代码

var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId, clientScret,tenantId, AzureEnvironment.AzureGlobalCloud);

NetworkManagementClient networkManagementClient = new NetworkManagementClient(credentials) {SubscriptionId = subscriptionId};

var result= networkManagementClient.CheckDnsNameAvailabilityWithHttpMessagesAsync("location", "DomainLabelName").Result;
很好——我实际上在同一个对象上使用了
CheckDnsNameAvailabilityAsync
,因为它有一个名为
Available
bool?
属性,我不必处理
AzureOperationResponse
类/解析响应但是如果你没有给我指出正确的方向,我永远也找不到它而要开机,每次通话只需不到一秒钟的时间非常感谢!:)