通过 ServerManager 配置 WebDav
Configuring WebDav through ServerManager
我想配置我的 IIS 虚拟文件夹以启用 WebDav 发布。我可以很容易地手动完成,但我想通过代码在 C# 中做同样的事情。
我在创建站点或虚拟目录甚至向它们添加 MIME 类型等属性时都没有问题,但我似乎无法访问应该在我的 applicationHost.config 文件中的 WebDav 设置。我已经进行了多次这样的尝试。显然这段代码没有任何作用,它只是为了向您展示我在玩弄什么。
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>
我的测试证明这个操作是可以用代码完成的,包括虚拟目录下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);
}
}
所以我认为你的代码没有执行任何操作,它可能是错误的。我建议你在调试模式下寻找问题。
更多代码配置请参考这篇document.
我想配置我的 IIS 虚拟文件夹以启用 WebDav 发布。我可以很容易地手动完成,但我想通过代码在 C# 中做同样的事情。 我在创建站点或虚拟目录甚至向它们添加 MIME 类型等属性时都没有问题,但我似乎无法访问应该在我的 applicationHost.config 文件中的 WebDav 设置。我已经进行了多次这样的尝试。显然这段代码没有任何作用,它只是为了向您展示我在玩弄什么。
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>
我的测试证明这个操作是可以用代码完成的,包括虚拟目录下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);
}
}
所以我认为你的代码没有执行任何操作,它可能是错误的。我建议你在调试模式下寻找问题。
更多代码配置请参考这篇document.