#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 с помощью кода, а также опубликовать для виртуальных каталогов этого сайта.