How to get “Browse” URL for web site in IIS using C#?

前端 未结 4 971
渐次进展
渐次进展 2021-01-17 19:38

Say, I have the \"Site Name\" web site in the IIS. I can access most of its functions via the ServerManager class from my C# code. What I can\'t seem to figure out is how to

相关标签:
4条回答
  • 2021-01-17 19:49

    JexusManager is now open source, so you can check its implementation of Binding.ToUri method,

    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);
            }
    

    As Microsoft's MWA does not expose the HostName part, you have to replace that with something equivalent (as you are the one who initialize ServerManager, you should know what is the host name).

    0 讨论(0)
  • 2021-01-17 19:59

    This is one way of getting the browse url

    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);
    }
    
    0 讨论(0)
  • 2021-01-17 20:00

    Try this:

    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++;                    
        }
    }
    
    0 讨论(0)
  • 2021-01-17 20:08

    Right click and go to edit bindings... under Host Name you can actually see which domain it is.

    Or

    Click the site and on actions tab on right hand side you can click bindings...

    To Get the URL :

    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
    

    Edit:

    To get site information try using HostingEnvironment.ApplicationHost.GetSiteName() or HostingEnvironment.ApplicationHost.GetSiteID() see below sample(it is not tested) :

    using (ServerManager sm = new ServerManager())
    {
        foreach (Binding b in sm.Sites[HostingEnvironment.ApplicationHost.GetSiteName()].Bindings)
        {
            // ...
        }     
    }
    
    0 讨论(0)
提交回复
热议问题