试图从Android模拟器访问本地托管的ASP.net服务 - 不在127.0.0.1上公开?

Ben*_*jin 3 asp.net iis rest android visual-studio

我正在运行通过Visual Studio运行的ASP.net服务.它可以通过浏览器访问(示例API调用)http://localhost:9000/api/Maps/1.当我http://127.0.0.1:9000/api/Maps/1通过浏览器访问时,我收到400错误(错误请求 - 无效主机名).

Android模拟器可以成功调用外部站点(例如http://httpbin.org/ip).当我指示应用程序从中提取JSON http://10.0.2.2:9000/api/Maps/1(10.0.2.2是网络告诉我将模拟器指向主机的本地主机时,结果是HTML(我假设是)与上面的127.0.0.1相同的400错误.

似乎当我从Visual Studio运行Web服务时(2013年,如果这有所不同),它在localhost上正确公开,但不是127.0.0.1,因此无法进行测试.任何人都可以帮我解决这个问题吗?谢谢!

ste*_*yer 6

该问题是由主机名的IIS Express绑定引起的,主机名由Visual Studio设置为"localhost".因此,"127.0.0.1"给出"错误400.错误请求(无效主机名)".

解决这个问题需要几个步骤.

  1. 修改applicationhost.config

这是IIS Express的配置文件,应位于ASP.NET项目的根目录中.如果无法轻易找到此文件,请右键单击任务栏中的IIS express,单击"显示所有应用程序",并将注册的站点放在列表中.单击您尝试访问的站点.应在底部列出两个文件路径"Path"和"Config".config是applicationhost.config文件的位置.

绑定信息将具有以下格式:

 <binding protocol="http" bindingInformation="*:17687:localhost" />
Run Code Online (Sandbox Code Playgroud)

bindingInformation中的冒号分隔值表示要侦听的IP地址,端口和主机名.您可以删除主机名以避免IIS Express在请求标头字段中期望"localhost":

 <binding protocol="http" bindingInformation="*:17687:" />
Run Code Online (Sandbox Code Playgroud)
  1. 退出IIS Express

需要重新启动IIS Express才能进行此配置更改.可以通过右键单击任务栏中的IIS来关闭它,然后选择"退出"或选择特定站点(大多数情况下只会有1个,除非有多个Web类型项目 - ASP.NET,WCT等.)然后单击"停止",然后单击"开始".但是退出它会更好,因为可能需要进行额外的配置,而PC可能还需要重新启动.

  1. 火墙

测试站点使用的端口应包含在防火墙中.在上面的例子中,端口地址将是17687.打开防火墙设置并添加入站规则以允许此TCP端口.此时,可能需要重新启动.至少应停止并重新启动项目以重新启动IIS Express.

  • 你是一个救生员.只是一个注释,如果你使用内置IIS的VS,你将必须以管理员权限运行它,以便它可以打开端口.我的配置文件位于Solution\.vs\config目录下..vs目录是隐藏的,因此请确保将这些设置为可见 (2认同)