Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在IIS上的ASP.Net中获取主机名_C#_Asp.net_Iis - Fatal编程技术网

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应用程序标识