传统上,我在本地主机开发服务器上使用自定义域。大致如下:
dev.example.com
dev.api.example.com
这为我在使用外部api(如Facebook)时提供了很大的灵活性。这在过去与内置的Visual Studio Development Server一起工作得很好,因为我所需要做的只是向指向127.0.0.1的DNS记录添加一个CNAME。
但是,我还不能让它与IIS Express一起工作。我所做的一切努力似乎都失败了。我甚至向applicationHost添加了正确的XML配置。IIS Express的配置文件,但它似乎不能像真正安装IIS那样识别有效的条目。
<binding protocol="http" bindingInformation="*:1288:dev.example.com" />
每当我输入这一行并尝试请求http://dev.example.com:1288时,我都会收到以下消息:
错误请求-无效的主机名
有人知道我是否遗漏了什么明显的东西吗?或者IIS Express团队真的缺乏预见到这种类型的使用?
对于Visual Studio 2015,上述答案中的步骤适用,但应用程序主机。配置文件在一个新的位置。在你的“解决方案”文件夹中,如果你升级了,并且有两个版本的applicationhost,这是令人困惑的。在您的机器上配置。
\.vs\config
在该文件夹中,您将看到您的applicationhost。配置文件
或者,您也可以在解决方案文件夹中搜索.config文件并以这种方式找到它。
我个人使用以下配置:
在我的hosts文件中包含以下内容:
127.0.0.1 jam.net
127.0.0.1 www.jam.net
下面是我的applicationhost。配置文件:
<site name="JBN.Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:49707:" />
<binding protocol="http" bindingInformation="*:49707:localhost" />
</bindings>
</site>
记得以管理员身份运行visual studio 2015实例!如果你不想每次都这样做,我建议:
默认情况下,作为管理员如何运行Visual Studio ?
我在尝试升级到visual studio 2015时遇到了问题,并意识到我的配置都没有被转移。
大卫的解决办法很好。但是我发现页面中的<script>警报(document.domain);</script>仍然警告“localhost”,因为项目Url仍然是localhost,即使它已经被http://dev.example.com覆盖。我遇到的另一个问题是,它提醒我端口80已经在使用,即使我已经禁用Skype使用80端口号,由大卫默多克推荐。所以我想出了另一个更简单的解决方案:
Run Notepad as administrator, and open the C:\Windows\System32\drivers\etc\hosts, add 127.0.0.1 mydomain, and save the file;
Open the web project with Visual Studio 2013 (Note: must also run as administrator), right-click the project -> Properties -> Web, (lets suppose the Project Url under the "IIS Express" option is http://localhost:33333/), then change it from http://localhost:33333/ to http://mydomain:333333/
Note: After this change, you should neither click the "Create Virtual Directory" button on the right of the Project Url box nor click the Save button of the Visual Studio as they won't be succeeded. You can save your settings after next step 3.
Open %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config, search for "33333:localhost", then update it to "33333:mydomain" and save the file.
Save your setting as mentioned in step 2.
Right click a web page in your visual studio, and click "View in Browser". Now the page will be opened under http://mydomain:333333/, and <script>alert(document.domain);</script> in the page will alert "mydomain".
注意:上面列出的端口号假设为33333。您需要将其更改为您的visual studio设置的端口号。
Post编辑:今天我尝试了另一个域名,得到以下错误:无法启动IIS Express Web服务器。注册URL失败…访问被拒绝。(0 x80070005)。我通过右键单击Windows任务栏右下角的IIS Express图标退出IIS Express,然后以管理员身份重新启动我的visual studio,问题就解决了。
在使用Visual Studio 2012和IIS Express时,更改现有绑定不会永久工作。(它可能在你关闭VS之前有效,但在那之后,事情就变得非常混乱了。)
关键是保持现有的本地主机绑定并在其之后添加一个新绑定。
除非您以管理员身份运行,否则还需要运行netsh add urlacl(以标准用户身份授予自己运行非本地主机站点的权限)。
如果要允许任意主机名,整个过程如下:
创建您的web应用程序,并找出它正在使用的端口(参见项目属性,web选项卡,项目Url)。
在管理员提示符下,运行以下命令(将portnumber替换为您在#1中计算出的端口号):
Netsh HTTP添加urlacl url="http://*:portnumber/" user=everyone
Netsh HTTP添加urlacl url="http://localhost:portnumber/" user=everyone
您也可以使用您的用户名(DOMAIN\ user),而不是所有人,以获得更好的安全性。
Open applicationhost.config (usually under My Documents\IIS Express\config), and find the element with your port number.
Add one more binding with the host name you want (in this case, *). For example:
<site name="MvcApplication1" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:12853:localhost" />
<binding protocol="http" bindingInformation="*:12853:*" />
</bindings>
</site>
注意,如果想打开所有主机名(*),需要两个netsh命令(一个用于*,一个用于localhost)。如果您只想打开一个特定的主机名,则不需要严格地使用第二个netsh命令(localhost);只有具有特定主机名的一个就足够了。
以防万一有人需要…
我的要求是:
启用SSL
自定义的域
运行在(默认)端口:443
在IISExpress中设置这个URL: http://my.customdomain.com
为了设置这个,我使用了以下设置:
项目网址:http://localhost:57400
起始URL: http://my.customdomain.com
/ .vs / {solution-name} / config / applicationhost。配置设置:
<site ...>
<application>
...
</application>
<bindings>
<binding protocol="http" bindingInformation="*:57400:" />
<binding protocol="https" bindingInformation="*:443:my.customdomain.com" />
</bindings>
</site>