从Microsoft.Web.Administration中查找物理路径以及相对于其根目录的路径

时间:2010-12-02 11:54:34

标签: .net iis-7

我想使用Microsoft.Web.Administration .NET程序集在IIS网站中查找相对于网站根目录的路径。

似乎没有一种方法可以做到这一点,但我想知道 - 以下程序是最好的方法吗?:

  1. 获取 Microsoft.Web.Administration.Site 对象
  2. 找到应用程序 与...相匹配的最长路径 相对于路径的开头 根
  3. 剥离应用程序 从路径的开头的路径 相对于根,给予 相对于应用程序的路径
  4. 查找其中的虚拟目录 这个应用程序用的时间最长 匹配开头的路径 相对于的路径 应用
  5. 剥去 应用路径从一开始 相对于的路径 应用,给出路径 相对于虚拟目录
  6. 追加相对于的路径 虚拟目录(交换/用于) 到虚拟的物理路径 给出物理路径的目录 我们想要

3 个答案:

答案 0 :(得分:8)

我找到了以下代码来获取路径

ServerManager sm = new ServerManager();
sm.Sites["Default Web Site"].Applications["/"].VirtualDirectories["/"].PhysicalPath;

http://forums.iis.net/t/1146686.aspx/1

答案 1 :(得分:3)

你是绝对正确的,这是正确的算法。 所以要解释一下,确保:
1)找到它匹配的站点(如果你是根据主机名或绑定(ip,端口等)进行的话)。
2)在站点中找到与剩余URL的最长子集匹配的应用程序 3)在应用程序中找到与剩余URL的最长子集匹配的VirtualDirectory 4)做一个Path.Combine(vdir.PhysicalPath,“用剩余的URL替换为\”)

这是物理路径。 请记住,现在很多URL都是逻辑的(在MVC或重写等场景中),所以你可能没有真正的物理路径。

答案 2 :(得分:1)

列出服务器的所有虚拟和物理路径:

Dim stringIIS As String = String.Empty
Dim serverName As String = "MACHINE_NAME"
Dim sm1 As New ServerManager()

        Using sm As Microsoft.Web.Administration.ServerManager = Microsoft.Web.Administration.ServerManager.OpenRemote(serverName)

            Dim counter As Integer = 1

            For Each Site As Microsoft.Web.Administration.Site In sm.Sites

                stringIIS = "Site: " & Site.Name & (vbNewLine)

                For Each app As Microsoft.Web.Administration.Application In sm.Sites(Site.Name).Applications
                    stringIIS = stringIIS & "        Physical Path: " & (vbTab & sm1.Sites(Site.Name).Applications("/").VirtualDirectories("/").PhysicalPath().ToString() & vbNewLine)

                    For Each virtDir As Microsoft.Web.Administration.VirtualDirectory In app.VirtualDirectories
                        stringIIS = stringIIS & "        Virtual Path: " & (vbTab & app.Path & vbNewLine)
                        stringIIS = stringIIS & vbNewLine
                    Next
                Next

                counter += 1

            Next

            iis.Text = stringIIS
            iis.Visible = True
        End Using