Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
试图从Android emulator访问本地托管的ASP.net服务-未在127.0.0.1上公开?_Android_Asp.net_Visual Studio_Rest_Iis - Fatal编程技术网

试图从Android emulator访问本地托管的ASP.net服务-未在127.0.0.1上公开?

试图从Android emulator访问本地托管的ASP.net服务-未在127.0.0.1上公开?,android,asp.net,visual-studio,rest,iis,Android,Asp.net,Visual Studio,Rest,Iis,我正在通过Visual Studio运行ASP.net服务。可通过浏览器访问(示例API调用)http://localhost:9000/api/Maps/1。当我访问http://127.0.0.1:9000/api/Maps/1通过浏览器,我收到一个400错误(请求错误-主机名无效) Android emulator可以成功调用外部站点(例如http://httpbin.org/ip)。当我指示应用程序从http://10.0.2.2:9000/api/Maps/1(10.0.2.2是web

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

Android emulator可以成功调用外部站点(例如
http://httpbin.org/ip
)。当我指示应用程序从
http://10.0.2.2:9000/api/Maps/1
(10.0.2.2是web告诉我的将仿真器定向到主机的本地主机的内容,结果是(我假设是)上面127.0.0.1中相同的400错误的HTML


当我从Visual Studio运行web服务时(2013年,如果有区别的话),它似乎在localhost上正确公开,但不是127.0.0.1,因此无法进行测试。有人能帮我解决这个问题吗?谢谢!

您可以在Android Emulator中更改主机文件(对于根设备也是如此)。下面是您如何做到这一点的

  • 打开控制台或终端(windows/linux)
  • 检查模拟器是否已连接:
    adb设备
  • 称之为:

    Linux:
    adb pull/system/etc/hosts/home/“yourusername”/

    Windows:
    adb pull/system/etc/hosts C:/hosts

  • 打开
    hosts
    文件并在下面添加行

    yourdomainputthere benjin.local

  • 保存此文件并推送到emulator
  • adb重新装载
  • adb推送/home/yourusername/hosts/system/etc

  • 现在您可以访问这个url,就像benjin一样。本地

    Android emulator使用10.0.2.2代替127.0.0.1。因为开发机器上的127.0.0.1对应于emulator自己的环回接口


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

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

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

    绑定信息的格式如下:

     <binding protocol="http" bindingInformation="*:17687:localhost" />
    
    
    
    bindingInformation中以冒号分隔的值表示要侦听的IP地址、端口和主机名。您可以删除主机名,以避免IIS Express在请求标头字段中使用“localhost”:

     <binding protocol="http" bindingInformation="*:17687:" />
    
    
    
  • 退出IIS Express
  • 需要重新启动IIS Express才能进行此配置更改。可以通过右键单击任务栏中的IIS并选择“退出”来关闭IIS Express,也可以通过选择特定站点(大多数情况下只有1个站点,除非有多个web类型项目-ASP.NET、WCT等)并单击“停止”然后单击“启动”来关闭IIS Express。但是完全退出会更好,因为可能需要进行额外的配置,而且电脑可能需要重新启动

  • 防火墙

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

    我现在没有访问bog标准ASP.NET服务的权限,但在Web API上,您只需右键单击项目,选择属性并转到属性页的Web选项卡。在那里,我可以将项目Url字段更改为使用
    127.0.0.1
    而不是
    localhost
    。完成此操作后,仿真器应连接很好,虽然您的浏览器现在可以连接到
    localhost
    127.0.0.1

    ,但hosts文件只读取
    127.0.0.1 localhost
    。我该添加什么?据我所知,服务器只暴露于我桌面的本地主机,而不是模拟器。我怀疑解决方案在于ASP.net/IIS配置ion,而不是Android。添加需要使用某个名称访问的地址之后,我可能会有点发疯,但我不确定这会有什么帮助。
    hosts
    文件通过将“localhost”定向到127.0.0.1来工作。我假设我不能使用“localhost”emulator中的关键字,因为它指的是emulator,而不是运行emulator的计算机,对吗?请使用其他单词进行描述。就像我在“benjin.local”之前写的那样。因此,您可以通过此访问您的URL。我认为您误解了。模拟器正在访问127.0.0.1:9000。问题是我的服务器暴露在本地主机上,而不是127.0.0.1。可能有其他安全设置会阻止计算机接受外部连接。我发现了一些病毒防护程序ams可能会阻止它认为危险的连接。你是一个救生员。请注意,如果你将VS与内置IIS一起使用,你必须以管理员权限运行它,这样它才能打开端口。在我的例子中,配置文件位于Solution\.VS\config目录。该.VS目录是隐藏的,因此请确保将这些设置为visibleOur free VS e名为“输送机”的xtension在不更改配置的情况下解决了此问题: