【问题标题】:Configuring WebDav through ServerManager通过 ServerManager 配置 WebDav
【发布时间】:2021-03-10 09:17:57
【问题描述】:

我想配置我的 IIS 虚拟文件夹以启用 WebDav 发布。我可以很容易地手动完成,但我想通过代码在 C# 中做同样的事情。 我在创建站点或虚拟目录甚至向它们添加诸如 mime 类型之类的属性方面没有问题,但我似乎无法访问应该在我的 applicationHost.config 文件中的 WebDav 设置。我已经进行了多次这样的尝试。显然这个 sn-p 什么也没做,它只是在那里向你展示我在玩什么。

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>

【问题讨论】:

  • 这是因为位置标签不是映射到 .NET 对象的实体。 API 的设计并非如您所愿。
  • 因此,如果我想通过代码添加该功能,我最好的选择是手动修改 xml?还是有更好的办法?
  • 你的问题是为什么你不想完全理解Microsoft.Web.Administration API 的设计并遵循它的约定?要访问位置标签中的某个部分(不是所有部分),请使用 docs.microsoft.com/en-us/dotnet/api/…
  • 我需要能够将 webdav 发布添加到我的虚拟目录,因为我已经在使用 Microsoft.Web.Administration API 来创建站点和目录,我想我也可以使用它添加发布

标签: c# iis webdav servermanager


【解决方案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);
            }
        }

所以我认为你的代码没有执行任何操作,可能是有问题。我建议你在调试模式下寻找问题。

更多通过代码配置可以参考这个document

【讨论】:

  • 谢谢,这正是我所需要的,根据您的回答,我还能够通过代码启用 WebDav 功能并发布该站点的虚拟目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
相关资源
最近更新 更多