簡體   English   中英

以編程方式向 Azure WebApp 添加新的虛擬目錄

[英]Add new Virtual Directories to an Azure WebApp programmatically

是否可以使用 Azure SDK 或 Azure REST API 將虛擬目錄添加到 Azure Web Apps 網站?

我們有一個 ASP.NET CMS 網站(主站點位於www.example.com ),它能夠創建指向與主站點相同的源代碼的新網站實例,並使用 1 級虛擬目錄名稱(例如www.example.com。 example.com/project1 )。 每個虛擬目錄都有自己的用戶和管理。

我可以在 Azure 門戶中手動添加虛擬目錄。 我還可以使用 .NET API 在我的本地 IIS(來自Microsoft.Web.Administration 的ServerManager )中以編程方式創建它,但它在 Azure Web Apps 中不起作用。

請幫忙。

您可以使用管理 rest api 為 azure webapp 創建一個虛擬目錄。

public void CreateVD(string name)
{
    try
    {
        System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(String.Format(@"https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Web/sites/{2}/config/web?api-version=2015-08-01",subscriptionId,webSpaceName,webSiteName));
        request.Headers.Add("x-ms-version", "2013-03-01");
        request.ContentType = "application/json";
        var token = GetAuthorizationHeader();
        request.Headers.Add("Authorization", "Bearer" + " " + token);

        System.Net.WebResponse response = request.GetResponse();

        string data = "";
        using (System.IO.Stream stream = response.GetResponseStream())
        {
              System.IO.StreamReader sr = new System.IO.StreamReader(stream);
              data = sr.ReadToEnd();
              sr.Close();
              stream.Close();
              Console.WriteLine("data found");
        }

        if (data == "")
        {
              Console.WriteLine("Error in collecting data");
                    return;
        }

        string path = name, directory = name;
        data = data.Replace("virtualApplications\":[", "virtualApplications\":[{\"virtualPath\":\"/" + path + "\",\"physicalPath\":\"site\\\\wwwroot\\\\" + directory + "\",\"preloadEnabled\":false,\"virtualDirectories\":null},");
        request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(String.Format(@"https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Web/sites/{2}/config/web?api-version=2015-08-01",subscriptionId,webSpaceName,webSiteName));
        request.Headers.Add("x-ms-version", "2013-03-01");
        request.ContentType = "application/json";
        request.AllowWriteStreamBuffering = false;
        request.Accept = "Accept=application/json";
        request.SendChunked = false;
        request.Headers.Add("Authorization", "Bearer" + " " + token);
        request.ContentLength = data.Length;
        request.Method = "PUT";

        System.IO.StreamWriter sw = new System.IO.StreamWriter(request.GetRequestStream());
        sw.Write(data);
        sw.Close();

        response = request.GetResponse();

        using (System.IO.Stream stream = response.GetResponseStream())
        {
             data = (new System.IO.StreamReader(stream)).ReadToEnd();
             Console.WriteLine("DONE");
        }
   }
   catch (Exception ex)
   {
        Console.WriteLine(ex.StackTrace);
   }
}

對於訪問令牌,您可以使用以下代碼來獲取令牌。

private string GetAuthorizationHeader()
{
    AuthenticationResult result = null;

    var context = new AuthenticationContext(string.Format(loginpath, tenantId));

    result = context.AcquireToken(apiEndpoint, clientId, new Uri(redirectUri));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM