10

假设我在 IIS 中有“站点名称”网站。我可以通过我的 C# 代码中的ServerManager类访问它的大部分功能。我似乎无法弄清楚如何获取它的“浏览”URL,就像我在下面的屏幕截图中显示的那样?

在此处输入图像描述

如果我去 Manage Website -> Browse in the IIS Manager,它将使用如下 URL 启动 IE:

http://localhost:8080/app1/Default.aspx

所以我需要一个这样的网址。

PS。请注意,我不需要启动网站本身。

4

4 回答 4

1

尝试这个:

using (Microsoft.Web.Administration.ServerManager sm = Microsoft.Web.Administration.ServerManager.OpenRemote("localhost"))
{
    int counter = 0;
    string[] ipAddress = new string[10];
    string[] sites = new string[10];
    List<Tuple<string, string>> mylist = new List<Tuple<string, string>>();

    foreach (var site in sm.Sites)
    {
        sites[counter] = site.Name;

        foreach(var bnd in site.Bindings)
            ipAddress[counter] = bnd.EndPoint != null ? 
                bnd.EndPoint.Address.ToString() : String.Empty;

        mylist.Add(Tuple.Create(sites[counter], ipAddress[counter]));
                counter++;                    
    }
}
于 2016-01-12T11:01:23.950 回答
0

右键单击并转到您实际上可以看到它是哪个域edit bindings...Host Name

或者

单击站点,然后在右侧的操作选项卡上,您可以单击bindings...

获取网址:

HttpContext.Current.Request.Url.AbsoluteUri;
//http://localhost:8080/app1/Default.aspx

HttpContext.Current.Request.Url.AbsolutePath;
// /YourSite/app1/Defaul.aspx

HttpContext.Current.Request.Url.Host;
// localhost:8080

编辑:

要获取站点信息,请尝试使用HostingEnvironment.ApplicationHost.GetSiteName()HostingEnvironment.ApplicationHost.GetSiteID()查看以下示例(未经测试):

using (ServerManager sm = new ServerManager())
{
    foreach (Binding b in sm.Sites[HostingEnvironment.ApplicationHost.GetSiteName()].Bindings)
    {
        // ...
    }     
}
于 2013-11-08T08:11:56.823 回答
0

这是获取浏览网址的一种方式

ServerManager serverMgr = new ServerManager();
Site site = serverMgr.Sites["YourSiteName"];
List<string[]> urls = new List<string[]>();
foreach (Binding binding in site.Bindings)
{
    string bindingInfo = binding.BindingInformation;
    string subString = bindingInfo.Substring(2, bindingInfo.Length - 2);
    string[] adrs = subString.Split(':');
    adrs[0] = "localhost:" + adrs[0];
    urls.Add(adrs);
}
于 2016-06-21T07:09:12.120 回答
0

JexusManager 现在是开源的,所以你可以检查它的 Binding.ToUri 方法的实现,

https://github.com/jexuswebserver/Microsoft.Web.Administration/blob/master/Microsoft.Web.Administration/Binding.cs

        internal string ToUri()
        {
            var address = EndPoint.Address.Equals(IPAddress.Any)
                ? Parent.Parent.Parent.Parent.HostName.ExtractName()
                : EndPoint.AddressFamily == AddressFamily.InterNetwork
                    ? EndPoint.Address.ToString()
                    : string.Format("[{0}]", EndPoint.Address);
            return IsDefaultPort
                ? string.Format("{0}://{1}", Protocol, address)
                : string.Format("{0}://{1}:{2}", Protocol, address, EndPoint.Port);
        }

由于 Microsoft 的 MWA 没有公开 HostName 部分,因此您必须将其替换为等效的内容(因为您是初始化 ServerManager 的人,您应该知道主机名是什么)。

于 2016-07-24T05:06:12.693 回答