假设我在IIS中有一个名为“站点名称”的网站。我可以通过C#代码中的ServerManager类访问大部分功能。但我似乎无法弄清如何获取它的“浏览”URL,就像我在下面截图中所示的那样?
如果我在中进入“管理网站”->“浏览”,它将使用以下URL启动IE:
http://localhost:8080/app1/Default.aspx
所以我需要获取像那样的URL。
附注:请注意,我不需要启动网站本身。
假设我在IIS中有一个名为“站点名称”的网站。我可以通过C#代码中的ServerManager类访问大部分功能。但我似乎无法弄清如何获取它的“浏览”URL,就像我在下面截图中所示的那样?
如果我在中进入“管理网站”->“浏览”,它将使用以下URL启动IE:
http://localhost:8080/app1/Default.aspx
所以我需要获取像那样的URL。
附注:请注意,我不需要启动网站本身。
试试这个:
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++;
}
}
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)
{
// ...
}
}
这是获取浏览器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);
}
JexusManager现在是开源的,因此您可以检查其Binding.ToUri方法的实现。
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);
}