using System.Collections.Generic;
using System.Web.Http;
using System.Web.Http.Cors;
using WebApiServer.Models;
namespace WebApiServer.Controllers
{
[RoutePrefix("databases")]
[EnableCors("*", "*", "*")]
public class DatabasesController : ApiController
{
[Route("")]
[HttpGet]
public IHttpActionResult Get()
{
var databases = new List<DatabaseCategory>()
{
new DatabaseCategory
{
CategoryName = "Bases de datos relacionales",
Databases = new List<Database>()
{
new Database() { DatabaseName = "SQL Server" },
new Database() { DatabaseName = "Oracle" },
new Database { DatabaseName = "PostgreSQL" }
}
},
new DatabaseCategory
{
CategoryName = "Bases de datos NoSQL",
Databases = new List<Database>()
{
new Database() { DatabaseName = "RavenDB" },
new Database { DatabaseName = "CouchBase" },
new Database { DatabaseName = "MongoDB" }
}
}
};
return Ok(databases);
}
}
}
6条答案
按热度按时间7kqas0il1#
Android设备/模拟器上的localhost很可能没有解析到您的开发机器/服务器的IP。Localhost可能指向设备/模拟器本身。您能点击您机器的实际IP地址吗?或者您能在云中的某个地方托管Web服务并尝试这样做吗?
谢谢,丹
jdgnovmf2#
在您的仿真器中(Ionic应用程序正在仿真器中运行),
http://localhost
不再指向您的计算机,而是指向仿真设备。了解这一点,http://localhost:26309/api/User/getAll/
在您的设备中不是有效的端点,因此请求失败。要解决此问题,您有两种选择:
第一个选项是在你的Ionic应用中创建一个简单的代理。
现在,当从你的Ionic应用程序中请求时,只需写
/localhost/api/User/getAll/
,它就应该工作了。第二种选择是使用您计算机的私有IP作为端点域。
lrpiutwd3#
由于cordova应用程序是从设备文件系统加载的,因此它的来源与web api不同。应用程序尝试调用web api,但这被Same Origin Policy禁止。要解决此问题,您需要在web api上执行enable CORS。
要启用CORS,您需要安装
Microsoft.AspNet.WebApi.Cors
NuGet包并使用EnableCors
属性。例如:如果运行在设备(模拟的或物理的)上的应用调用http://localhost:26309/databases,它会尝试连接到设备itseft上的端口26309,而不是连接到运行web api的开发者机器上,所以你会收到
ERR_CONNECTION_REFUSED
,因为设备上没有人在监听那个端口。因此,您应该使用您的开发人员计算机的ip地址或解析为该地址的DNS名称,而不是使用
http://localhost:26309
。例如,http://192.168.8.162:26309
或http://yourMachine.yourDomain.com:26309
。但是,您将遇到另一个问题,您的web api运行在不允许远程连接的开发web服务器IIS Express上。可以将其配置为允许远程连接,但这样你就必须以管理员身份执行Visual Studio。一个更好的解决方案是安装IIS并将其配置为反向代理。这可以在Windows 10专业版中通过安装URL rewrite and ARR和configuring it来完成:1.首先安装IIS,转到“控制面板”,“打开或关闭Windows功能”,“启用Internet信息服务”。
1.从here安装URL重写2.0
1.从here安装应用程序请求路由3.0
1.打开Internet信息服务管理器
1.添加Web站点。设置站点名称和物理路径。在绑定部分,指定26308端口(我的个人约定:IIS Express端口-1)。将主机名留空。
1.点击新创建的网站。在右边的窗格中打开“URL重写”
1.在“操作”窗格上,单击“添加规则”,选择“反向代理”
1.在“输入服务器名称或IP地址...”文本框中写入localhost:26309
1.单击确定
1.将TCP端口26308的例外规则添加到Windows防火墙。
现在,您需要修改cordova应用程序,以便向IIS上新创建的网站发出请求。
这样你就可以同时调试你的cordova应用和web api应用,我的意思是你可以给两者都添加断点。它适用于模拟设备以及连接到USB的物理设备。你需要一个合适的wifi来连接你的开发机器和设备。
ppcbkaq54#
2020更新。对我有效的方法:
也将此添加到
config.xml
uurv41yg5#
**2022年问题:**也遇到了同样的问题,发现使用
ionic cordova run android -livereload
时,当我正常运行应用程序时,它给了我这个错误:net::ERR_CONNECTION_REFUSED
当我检查我的配置时,我发现-livereload
标志将src="http://localhost:8100"
添加到此<content original-src="index.html" src="http://localhost:8100" />
而不是:
<content src="index.html" />
yvt65v4c6#
发生此错误的原因有几个。
请确保您尝试访问的URL有效或无效。
然后,确保在后端应用程序中启用了CORS。为此,请使用Microsoft.AspNet.WebApi.Cors,或者,如果您使用的是OWIN,则在startup.cs配置中使用app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)(这来自Microsoft.Owin.Cors)
完成此操作后,请转到您的web.config并键入以下内容:
这样就能解决问题。