Настройка WebDAV через ServerManager

#c# #iis #webdav #servermanager

#c# #iis #webdav #servermanager

Вопрос:

Я хочу настроить свою виртуальную папку IIS, чтобы включить публикацию WebDAV. Я могу легко сделать это вручную, но я хотел сделать то же самое с помощью кода на C #. У меня нет проблем с созданием сайтов или виртуальных каталогов и даже добавлением к ним таких свойств, как типы mime, но, похоже, я не могу получить доступ к настройкам WebDAV, которые должны быть в моем файле applicationHost.config. Я предпринял несколько подобных попыток. Очевидно, что этот фрагмент ничего не делает, он предназначен только для того, чтобы показать вам, с чем я играл.

 using (var serverManager = new ServerManager())
{
    try
    {
        var app = serverManager.Sites.FirstOrDefault(o => o.Name.Equals("custom"))?.Applications.First(o => o.Path.Equals("/"));
        var config = serverManager.GetApplicationHostConfiguration();
        var web = serverManager.GetWebConfiguration("custom");
        var setting = config.RootSectionGroup;
        var admin = serverManager.GetAdministrationConfiguration();

        serverManager.CommitChanges();
    }
    catch (Exception e)
    {
        Console.WriteLine($"Error when creating virtual directory: {e.Message}");
    }
}
 

Я пробовал использовать все эти методы, но
Кажется, я не могу получить доступ к этим разделам, которые расположены в конце моего файла applicationHost.config. Вторая — моя виртуальная папка. Функциональность WebDAV активна, я пытался подключиться к ней с помощью некоторых приложений, и она работает нормально. Что я могу сделать? Заранее спасибо.

 <location path="custom">
    <system.webServer>
        <security>
            <requestFiltering>
                <fileExtensions applyToWebDAV="false" />
                <verbs applyToWebDAV="false" />
                <hiddenSegments applyToWebDAV="false" />
            </requestFiltering>
        </security>
        <webdav>
            <authoring enabled="true">
                <properties allowAnonymousPropfind="true" />
            </authoring>
        </webdav>
    </system.webServer>
</location>
<location path="custom/local">
    <system.webServer>
        <webdav>
            <authoringRules>
                <add users="*" path="*" access="Read" />
            </authoringRules>
        </webdav>
    </system.webServer>
</location>
 

Комментарии:

1. Это потому, что теги местоположения не являются объектами, сопоставленными . СЕТЕВЫЕ объекты. API разработан не так, как вы хотели.

2. Итак, если бы я хотел добавить эту функциональность с помощью кода, лучше всего было бы вручную изменить xml? Или есть лучший способ?

3. Вопрос к вам в том, почему вы не хотите полностью понимать дизайн Microsoft.Web.Administration API и следовать его соглашению? Чтобы получить доступ к разделу (не ко всем разделам) в теге location, используйте docs.microsoft.com/en-us/dotnet/api /…

4. Мне нужно иметь возможность добавлять публикации webdav в мой виртуальный каталог, поскольку я уже использовал Microsoft.Web.Administration API для создания сайтов и каталогов, я подумал, что могу также добавить публикацию с этим

Ответ №1:

Мой тест доказывает, что эту операцию можно выполнить с помощью кода, включая настройку authoringRules в виртуальном каталоге.

  using (ServerManager serverManager = new ServerManager())
        {
            try
            {

                Configuration config = serverManager.GetApplicationHostConfiguration();

                ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", "Default Web Site/a");

                ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection();

                ConfigurationElement addElement = authoringRulesCollection.CreateElement("add");
                addElement["roles"] = @"administrators";
                addElement["path"] = @"*";
                addElement["access"] = @"Read, Write, Source";
                authoringRulesCollection.Add(addElement);

                serverManager.CommitChanges();
                Console.WriteLine("success");
            }
            catch (Exception e)
            {
                Console.WriteLine("failed" e.Message);
            }
        }
 

Поэтому я думаю, что ваш код не выполняет никаких операций, возможно, что-то не так. Я предлагаю вам искать проблемы в режиме отладки.

Для получения дополнительной информации о настройке с помощью кода, пожалуйста, обратитесь к этому документу .

Комментарии:

1. Спасибо, это то, что мне было нужно, основываясь на вашем ответе, я также смог включить функцию WebDAV с помощью кода, а также опубликовать для виртуальных каталогов этого сайта.