我正在运行一个通过Visual Studio运行的ASP.net服务。它可以通过浏览器访问(示例应用程序接口调用) http://localhost:9000/api/Maps/1
。当我通过浏览器访问http://127.0.0.1:9000/api/Maps/1
时,我得到了一个400错误(错误的请求-无效的主机名)。
安卓模拟器可以成功调用外部站点(例如http://httpbin.org/ip
)。当我指示应用程序从http://10.0.2.2:9000/api/Maps/1
(10.0.2.2是web告诉我将模拟器定向到主机的本地主机)中提取JSON时,结果是(我假设是)来自上面127.0.0.1的相同的400错误的HTML.
似乎当我从Visual Studio (2013 )运行web服务时,它可以在本地主机上正确地公开,但不能在127.0.0.1上公开,因此不能用于测试。有人能帮我解决这个问题吗?谢谢!
发布于 2017-01-28 00:08:04
该问题是由主机名绑定的IIS Express造成的,并且Visual Studio将主机名设置为"localhost“。因此,"127.0.0.1“会给出一个”错误400.错误请求(无效主机名)“。
解决这个问题需要几个步骤。
修改applicationhost.config的
这是IIS Express的配置文件,应该位于ASP.NET项目的根目录中。如果这个文件不容易找到,右键单击任务栏中的IIS express,单击“显示所有应用程序”,注册的站点应该会出现在列表中。单击您尝试访问的站点。底部应列出两个文件路径:"Path“和"Config”。配置是applicationhost.config文件的位置。
绑定信息的格式如下:
<binding protocol="http" bindingInformation="*:17687:localhost" />
bindingInformation中的冒号分隔值表示要侦听的IP地址、端口和主机名。您可以删除主机名,以避免IIS Express在请求标头字段中预期为"localhost“:
<binding protocol="http" bindingInformation="*:17687:" />
需要重新启动IIS Express才能使此配置更改生效。它可以通过右键单击任务栏中的IIS并选择“退出”来关闭,也可以通过选择特定的站点来关闭(大多数时候只有1个,除非有多个web类型的项目- ASP.NET、WCT等)。然后单击“停止”,然后单击“开始”。但完全退出会更好,因为可能需要进行额外的配置,而且PC可能无论如何都需要重新启动。
测试站点使用的端口应该包含在防火墙中。在上面的例子中,端口地址是17687。打开防火墙设置并添加入站规则以允许此TCP端口。此时,可能需要重新启动。至少,应停止并重新启动项目以重新启动IIS Express。
发布于 2014-02-11 14:32:20
您可以在Android Emulator中更改主机文件(也适用于根设备)。下面是你如何做到这一点的。
如果模拟器已连接,则打开控制台或终端(windows/linux)
adb devices
Linux:adb pull /system/etc/hosts /home/"yourusername"/
Windows:adb pull /system/etc/hosts C:/hosts
hosts
文件并添加以下行对此文件执行yourdomainputhere benjin.local
adb remount
adb push /home/yourusername/hosts /system/etc
现在,您可以访问此url,如benjin.local
发布于 2015-02-10 14:30:03
Android模拟器使用10.0.2.2代替127.0.0.1。因为您的开发计算机上的127.0.0.1对应于仿真器自己的回送接口。
http://developer.android.com/tools/devices/emulator.html#networkaddresses
https://stackoverflow.com/questions/21703617
复制