C# 在IIS上的ASP.Net中获取主机名
根据我的问题 我将在C# 在IIS上的ASP.Net中获取主机名,c#,asp.net,iis,C#,Asp.net,Iis,根据我的问题 我将在Application\u Start中获取主机名,因此我之前已经这样做了: if(string.IsNullOrWhiteSpace(Hostname)) Hostname = Dns.GetHostName(); 根据此屏幕截图: 但是它返回skyweb——但是我想得到RND1 获取主机名的另一个解决方案是HttpContext.Current.Request.Url.Host但正如你所知,我不想通过页面事件进入,最好先启动 那么最好的方法是什么呢
Application\u Start
中获取主机名,因此我之前已经这样做了:
if(string.IsNullOrWhiteSpace(Hostname))
Hostname = Dns.GetHostName();
根据此屏幕截图:
但是它返回skyweb
——但是我想得到RND1
获取主机名的另一个解决方案是HttpContext.Current.Request.Url.Host代码>但正如你所知,我不想通过页面事件进入,最好先启动
那么最好的方法是什么呢
提前谢谢
Edit1:
如果你看一看,你会看到我正在寻找的图片中指出的,同时我在这个截图中再次提到:
我无法在配置中设置此项,它可能是在安装过程中设置的,也可能是由服务器管理员手动设置的
在添加新网站时,我正在查找主机名。除非您的应用程序可以访问IIS配置数据(通常不会),否则在请求期间,您所指框中的主机名只能作为URL的一部分进行访问。原因之一是一个站点可以有任意数量的绑定,甚至可以有通配符。我以前曾尝试从应用程序本身访问站点绑定配置,但应用程序似乎没有读取自己配置的权限。我不确定Microsoft为什么选择这样做,这可能有一个很好的理由,但我不知道它是什么。除非您的应用程序可以访问IIS配置数据(通常不会),否则在请求期间,您所指框中的主机名只能作为URL的一部分进行访问。原因之一是一个站点可以有任意数量的绑定,甚至可以有通配符。我以前曾尝试从应用程序本身访问站点绑定配置,但应用程序似乎没有读取自己配置的权限。我不知道微软为什么选择这样的限制,这可能有一个很好的理由,但我不知道它是什么。我解决了它,得到了我想要的,发布到这里的其他人可能需要这个解决方案
当我们添加主机名并绑定位于C:\Windows\System32\inetsrv\config
的applicationHost.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>
并在应用程序启动中使用它,如:
void Application_Start(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(Hostname))
Hostname = GetHostname();
}
希望对其他人有用
谢谢。我解决了这个问题,得到了我想要的,在这里发布给其他可能需要这个解决方案的人
当我们添加主机名并绑定位于C:\Windows\System32\inetsrv\config
的applicationHost.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>
并在应用程序启动中使用它,如:
void Application_Start(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(Hostname))
Hostname = GetHostname();
}
希望对其他人有用
谢谢。为什么不在配置中设置一个自己指定的设置(如appsettings)?试图根据DNS查找或检查绑定来自动确定它将是一件非常麻烦的事情。RND1和RND2不是主机名。它们是站点名称。DNS和/或URL主机名也不一定与计算机名相同。所有这些都是独立的东西,因此不清楚您真正想要的是什么。请参阅更新部分。RND1和RND2是sitename,但我也设置了相同的主机名,无论如何,应该有一种方法可以从绑定或其他方式获取主机名……为什么不在配置中设置一个设置(例如appsettings)你自己在哪里指定的?试图根据DNS查找或检查绑定来自动确定它将是一件非常麻烦的事情。RND1和RND2不是主机名。它们是站点名称。DNS和/或URL主机名也不一定与计算机名相同。所有这些都是独立的东西,因此不清楚您真正想要的是什么。请参阅更新部分。RND1和RND2是sitename,但我也将主机名设置为相同的,无论如何,应该有一种方法可以从绑定或其他方式获取主机名…是的,一个站点可能有任意数量的绑定,但是,如果我可以从Http绑定中获取主机名,那么问题就为我解决了,但是在app_start
中,正如我所说,这个信息无法从应用程序本身访问(至少在几年前我尝试在IIS 7上获取时是这样)。我最后编写了一个安装脚本,在安装过程中从IIS查询信息(那时你有权限)并将其放入web.config中的某个设置中,几年后我放弃了该设置,转而采用不同的方法,根据用于访问应用程序的URL计算每个请求的值。感谢您的帮助和努力,我的+1。是的,一个站点可能有任意数量的绑定,但如果我可以从Http绑定中获得主机名,则这个问题为我解决了,但正如我所说,在app_start
中,无法从应用程序本身访问此信息(至少在几年前我尝试在IIS 7上获取此信息时是这样)。我最终编写了一个安装脚本,在安装过程中查询IIS中的信息(您可以访问)并将其放入web.config中的某个设置中,几年后我放弃了该设置,转而采用另一种方法,根据用于访问应用程序的URL计算每个请求的值。感谢您的帮助和努力my+1。这可能在调试器下工作,但在运行应用程序时,是否从应用程序内部工作在IIS下?我不认为默认的IIS应用程序标识