7

是否可以使用 IIS 7 获取托管在 IIS 7 中的网站的基本 URL Microsoft.Web.Administration.ServerManager

在最简单的情况下,这将是:

http://localhost

但我需要以编程方式获取它。

如果我不能使用ServerManager什么是最好的选择?

4

2 回答 2

17

对于那些对 Microsoft.Web.Administration.ServerManager 的使用感兴趣的人,这里有一些代码。考虑一个 IIS 应用程序可能有多个绑定,导致每个 Web 应用程序有多个 URL。

var siteName = "Default Web Site";
var appPath = "MyWebApplication";

var serverManager = new ServerManager();
var site = serverManager.Sites[siteName];
appPath = appPath.StartsWith("/") ? appPath : "/" + appPath;
var app = site.Applications[appPath];

var urls = new List<string>();

foreach (var binding in site.Bindings)
{
    var sb = new StringBuilder();
    sb.Append(binding.Protocol);
    sb.Append("://");
    if (!string.IsNullOrWhiteSpace(binding.Host))
    {
        sb.Append(binding.Host);
    }
    else
    {
        if (Equals(binding.EndPoint.Address, IPAddress.Any))
        {
            sb.Append("localhost");
        }
        else
        {
            sb.Append(binding.EndPoint.Address);
        }
    }

    if (binding.EndPoint.Port != 80)
    {
        sb.Append(":");
        sb.Append(binding.EndPoint.Port);
    }

    sb.Append(app.Path);
    urls.Add(sb.ToString());
}
于 2014-10-28T01:11:25.927 回答
14

您可以使用string baseURL = HttpContext.Current.Request.Url.Host.

于 2013-04-10T12:20:58.617 回答