在旧世界(Azure RM API之前),我们可以轻松检测到子域可用性,如下所示:
public async Task<HostedServiceCheckNameAvailabilityResponse> CheckNameAvailability(string name)
{
using (var client = new ComputeManagementClient(await subscription.GetAuthToken()))
{
return await client.HostedServices.CheckNameAvailabilityAsync(name);
}
}
这会告诉您子域是否可以使用,并且效果很好。
在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);
}
}
所以我的问题是,是否有更好/更直接的方法来检查子域可用性,使用Azure RM API?
答案 0 :(得分:1)
所以我的问题是,是否有更好/更直接的方法来检查子域可用性,使用Azure RM API?
我们可以使用 NetworkManagementClient 检查子域可用性,以下是演示代码。
<template>
<div @click.capture="openGroupModal($event)">
<tree-view :data="{1:1,2:{a:'a'}}" :options="{maxDepth: 3}"></tree-view>
</div>
</template>
<script>
export default {
name: "HelloWorld",
methods:{
openGroupModal($event){
console.log($event.target);
// other codes for showing modal and etc...
}
}
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>