Добавление новых виртуальных каталогов в веб-приложение Azure программно

#c# #asp.net #azure #azure-web-app-service #azure-webapps

#c# #asp.net #azure #azure-web-app-service #azure-webapps

Вопрос:

Можно ли добавить виртуальный каталог на веб-сайт Azure Web Apps с помощью Azure SDK или Azure REST API?

У нас есть ASP.NET Веб-сайт CMS (основной сайт находится по адресу www.example.com ), который имеет возможность создавать новые экземпляры веб-сайта, указывающие на тот же исходный код, что и основной сайт, с именем виртуального каталога уровня 1 (например www.example.com/project1 ). У каждого виртуального каталога будут свои пользователи и администрация.

Я могу добавить виртуальный каталог вручную на портале Azure. Я также могу использовать .NET API для его программного создания в моем локальном IIS (ServerManager из Microsoft.Web.Administration), но он не работает в веб-приложениях Azure.

Пожалуйста, помогите.

Ответ №1:

Вы можете использовать api управления rest для создания виртуального каталога в веб-приложении Azure.

 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));
    }