根据我的问题here
我将在Application_Start
中获取主机名,所以我在之前做过:
if(string.IsNullOrWhiteSpace(Hostname))
Hostname = Dns.GetHostName();
基于此屏幕截图:
但它会返回skyweb
- 但我希望得到RND1
。
获取主机名的另一个解决方案是HttpContext.Current.Request.Url.Host;
,但是如您所知,我不希望通过页面事件进入,最好先启动...
那么最好的方法是什么?
提前致谢。
EDIT1:
如果你看一下here,你会看到我想要找到的图片,同时我在这个截图中再次提到:
我无法在配置中设置此项,可以在安装过程中设置,也可以由管理员手动设置。
我正在寻找主机名,同时设置添加新网站。
答案 0 :(得分:1)
除非您的应用程序可以访问IIS配置数据(它们通常不能访问),否则您引用的框中的主机名只能在期间作为URL 的一部分进行访问。请求。其中一个原因是网站可以有任意数量的绑定,甚至可以使用通配符。我之前尝试从应用程序本身访问站点绑定配置,但似乎应用程序无权读取自己的配置。我不确定为什么微软选择制定这个限制,并且可能有充分的理由,但我不知道它是什么。
答案 1 :(得分:1)
我解决了它并得到我想要的东西,这里发布给其他人可能需要这个解决方案。
当我们添加主机名和绑定时,applicationHost.config
文件已更改位于C:\Windows\System32\inetsrv\config
,因此对于每个网站,它会得到一些更改,例如binding
,apppool
等等。我看到RND1
的绑定类似于:
<site name="RND1" id="3">
<bindings>
<binding protocol="http" bindingInformation="*:80:RND1" />
<binding protocol="net.pipe" bindingInformation="RND1" />
<binding protocol="net.tcp" bindingInformation="2042:RND1" />
<binding protocol="https" bindingInformation="*:443:RND1" sslFlags="0" />
<binding protocol="net.msmq" bindingInformation="RND1" />
</bindings>
</site>
因此我们可以获取applicationhost
文件并对其进行操作,但是通过一些搜索我越过this,它提供了一些在运行时获取IIS绑定的有用信息。
几乎没有代码更改我实现它如下所示获取主机名:
private static string GetHostname()
{
// Get the Site name
string siteName = HostingEnvironment.SiteName;
// Get the sites section from the AppPool.config
Microsoft.Web.Administration.ConfigurationSection sitesSection =
Microsoft.Web.Administration.WebConfigurationManager.GetSection(null, null,
"system.applicationHost/sites");
foreach (Microsoft.Web.Administration.ConfigurationElement site in sitesSection.GetCollection())
{
// Find the right Site
if (string.Equals((string)site["name"], siteName, StringComparison.OrdinalIgnoreCase))
{
// For each binding see if they are http based and return the port and protocol
foreach (Microsoft.Web.Administration.ConfigurationElement binding in site.GetCollection("bindings"))
{
var bindingInfo = (string)binding["bindingInformation"];
return bindingInfo.Split(':')[2];
}
}
}
return null;
}
并在application_start
中使用它,如:
void Application_Start(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(Hostname))
Hostname = GetHostname();
}
希望它对其他人有用。
感谢。