我在本地机器上运行一个web服务,该服务运行在localhost:54722上。

我想从Android模拟器中运行的应用程序调用该服务。

我读到在应用程序中使用10.0.2.2将访问localhost,但它似乎不能与端口号一起工作。它说HttpResponseException: Bad Request。


当前回答

"BadRequest"是一个通常由服务器本身发送的错误,参见rfc 2616

10.4.1 400个错误请求 由于语法错误,服务器无法理解请求。客户不应该在没有修改的情况下重复请求。

因此,您获得了到服务器的工作连接,但是您的请求不符合预期的形式。我不知道你如何创建连接,包括什么头(如果有的话)-但这是你应该检查。

如果您需要更多的帮助,请解释一下您的代码是关于什么的,以及它用来连接到服务器的是什么,这样我们就有了总体的了解。

这里有一个同样的问题-答案是内容类型没有设置在头部。

其他回答

如果有人还在寻找这个,这就是我的工作方式。

您需要找到您的机器相对于您所连接的设备/模拟器的IP。对于模拟器的方法是按照以下步骤;

进入虚拟机虚拟框->在列表中选择连接的设备。 选择“设置”->网络->确认设备连接到哪个网络。对我来说,它是“VirtualBox主机专用以太网适配器#2”。 在virtualbox中进入“文件->首选项->网络->主机专用网络”,找到上面步骤中指定的网络的IPv4。(通过悬停你会得到信息)

提供这个IP以从模拟器访问本地主机。端口与您在运行/发布服务时提供的端口相同。

注意#1:确保您已经注意到防火墙和入站规则。

注意#2:请在重新启动计算机后检查此IP。由于某种原因,即使我提供了“使用以下IP”,主机IP也发生了变化。

如果你和Asp一起工作。Net Web API,在项目中的.vs/config文件夹中,根据您的端口设置修改这些行。假设你使用端口1234和物理路径的项目文件夹设置由IIS是“D:\My Projects\YourSiteName”,那么

<site name="YourSiteName" id="1">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="D:\My Projects\YourSiteName" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:1234:*" />
                </bindings>
            </site>

在android studio中,使用“http://10.0.2.2:1234”访问你的api…

我解决了服务层使用Visual Studio IIS Express时的问题。只是指向10.0.2.2:端口不会工作。我没有像其他文章中提到的那样把IIS Express搞得一团糟,而是在IIS Express前面放了一个代理。例如apache或nginx。nginx.conf看起来像

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

然后android需要指向我的IP地址为192.168.x.x:8090

在Android模拟器上访问本地主机

从AndroidManifest.xml中添加internet权限 < uses-permission android: name = " android.permission。互联网" / > 添加android:usesCleartextTraffic="true",更多细节在这里: 运行如下命令找到您的系统IP地址:

ifconfig | grep "inet " | grep -v 127.0.0.1

复制从这一步(A)获得的IP地址

运行您的后端应用程序,您可以在localhost或127.0.0.1从您的系统访问它。 现在在android studio,你可以替换URL,如果你在代码中使用,或者你可以使用从步骤(A)获得的ip地址,并尝试在web浏览器中打开, 像这样http://192.168.0.102:8080/

不要忘记在IP地址后添加PORT,在我的例子中,应用程序运行在8080端口上,所以我添加了在(A)中获得的IP,端口为8080

你需要设置URL为10.0.2.2:portNr

portNr = ASP给出的端口。我当前的服务在localhost上运行:3229/ service .svc

我的url是10.0.2.2:3229

我用这种方法解决了我的问题

我希望它能有所帮助……