我正在開發一個應用程序使用離子,我可以從我的webApi服務器檢索數據並在導航器上顯示它們ionic serve
,但是當我嘗試在模擬器上執行它時:ionic run android -l -c
我收到此錯誤: net::ERR_CONNECTION_REFUSED
網:: ERR_CONNECTION_REFUSED離子
奇怪的是,該$範圍包含所需的數據,我可以記錄他們。
我正在開發一個應用程序使用離子,我可以從我的webApi服務器檢索數據並在導航器上顯示它們ionic serve
,但是當我嘗試在模擬器上執行它時:ionic run android -l -c
我收到此錯誤: net::ERR_CONNECTION_REFUSED
網:: ERR_CONNECTION_REFUSED離子
奇怪的是,該$範圍包含所需的數據,我可以記錄他們。
Android設備/仿真器上的很可能是本地主機不能解析爲開發計算機/服務器的IP。本地主機可能指向設備/仿真器本身。你能打到你機器的實際IP地址嗎?或者你可以在雲中的某個地方託管Web服務並試試?
感謝, 丹
由於科爾多瓦的應用程序從設備文件系統加載,它有不同的起源不是Web API。該應用程序嘗試調用Web API,但這是Same Origin Policy禁止的。爲了解決這個問題,你需要在你的web api上登錄到enable CORS。
要啓用CORS,您需要安裝Microsoft.AspNet.WebApi.Cors
NuGet程序包並使用EnableCors
屬性。例如:
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);
}
}
}
如果在設備上運行該應用程序(仿真或物理)調用http://localhost:26309/databases它嘗試連接到端口26309設備itseft上,而不是在運行網頁API顯影劑機。因此,您收到ERR_CONNECTION_REFUSED
,因爲設備上沒有人正在偵聽該端口。
因此,而不是使用http://localhost:26309
您應該使用您的開發人員機器ip地址或解析它的DNS名稱。例如http://192.168.8.162:26309
或http://yourMachine.yourDomain.com:26309
。但是你會遇到另一個問題,你的web api運行在不允許遠程連接的開發Web服務器IIS Express上。它可以配置爲允許遠程連接,但是您必須以管理員身份執行Visual Studio。更好的解決方案是安裝IIS並將其配置爲充當反向代理。這可以在Windows 10 Pro的完成通過安裝URL rewrite and ARR和configuring it:
現在你需要修改你科爾多瓦應用程序,使請求發送到IIS新創建的網站。它需要使請求http://192.168.8.162:26308
或http://yourMachine.yourDomain.com:26308
這樣就可以調試您的科爾多瓦的應用程序,並在同一時間,我的意思是,你可以添加破發點無論是網頁API應用程序。 它的工作原理爲仿真設備以及物理連接到USB的設備您將需要一個適當的無線訪問喲你的開發機器和設備。
由於幾個原因可能會發生此錯誤。
確保您嘗試訪問的URL有效或無效。
然後確保在後端應用程序中啓用CORS。要做到這一點,使用Microsoft.AspNet.WebApi.Cors,或者如果你正在使用OWIN然後在startup.cs配置,使用app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)(這是來自微軟.Owin.Cors)
您完成此操作後,請轉到您的web.config並鍵入下面的事情:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear/>
<add name="Access-Control-Allow-Credentials" value="true"/>
</customHeaders>
</httpProtocol>
</system.webServer>
這將解決這個問題。
你在你的web api上啓用了CORS嗎?另外,模擬器中的localhost是仿真器,而不是您的web api服務器。您需要在網絡上公開您的web api服務器。我通過將IIS配置爲反向代理將請求轉發到IIS Express –
謝謝,但我怎麼能這樣做呢? –
做什麼?啓用CORS?將您的web api服務器暴露於您的網絡?或將IIS配置爲反向代理? –