我想使用Microsoft.Web.Administration .NET程序集在IIS网站中查找相对于网站根目录的路径。
似乎没有一种方法可以做到这一点,但我想知道 - 以下程序是最好的方法吗?:
利
答案 0 :(得分:8)
我找到了以下代码来获取路径
ServerManager sm = new ServerManager();
sm.Sites["Default Web Site"].Applications["/"].VirtualDirectories["/"].PhysicalPath;
答案 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