私はionicを使用してアプリケーションを開発していますが、WebApiサーバからデータを取得し、ionic serve
というナビゲータに表示できますが、エミュレータで実行しようとするとionic run android -l -c
が表示されます。 net::ERR_CONNECTION_REFUSED
net :: ERR_CONNECTION_REFUSED ionic
何奇妙なことは$スコープが必要なデータが含まれていると私はそれらをログに記録可能性があることです。
私はionicを使用してアプリケーションを開発していますが、WebApiサーバからデータを取得し、ionic serve
というナビゲータに表示できますが、エミュレータで実行しようとするとionic run android -l -c
が表示されます。 net::ERR_CONNECTION_REFUSED
net :: ERR_CONNECTION_REFUSED ionic
何奇妙なことは$スコープが必要なデータが含まれていると私はそれらをログに記録可能性があることです。
Androidデバイス/エミュレータのlocalhostよりも、開発用マシン/サーバのIPが解決されない可能性があります。 Localhostは、おそらくデバイス/エミュレータ自体を指しています。代わりにあなたのマシンの実際のIPアドレスをヒットできますか?あるいは、クラウドのどこかでWebサービスをホストして、それを試すことができますか?コルドバアプリがデバイスのファイルシステムからロードされているので
おかげで、 ダン
は、それがウェブAPIとは異なる起源を持っています。アプリはウェブAPIを呼び出そうとしますが、これはSame Origin Policyによって禁止されています。この問題を解決するには、ウェブ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);
}
}
}
デバイス上で動作しているアプリは(エミュレートまたは物理的な)それがないのWeb APIを実行している開発者のマシンに、デバイスitseft上のポート26309に接続しようとhttp://localhost:26309/databasesを呼び出す場合。したがって、デバイス上の誰もそのポートでリッスンしていないので、ERR_CONNECTION_REFUSED
を受信します。
したがって、http://localhost:26309
を使用する代わりに、開発者マシンのIPアドレスまたはそれに解決されるDNS名を使用する必要があります。例えば、http://192.168.8.162:26309
またはhttp://yourMachine.yourDomain.com:26309
です。しかし、あなたは別の問題にぶつかります。あなたのウェブAPIは、リモート接続を許可しない開発ウェブサーバーIIS Express上で動作しています。リモート接続を許可するように設定できますが、Visual Studioを管理者として実行する必要があります。より良い解決策は、IISをインストールし、リバースプロキシとして動作するようにIISを構成することです。これはURL rewrite and ARRをインストールすることにより、プロのWindows 10で行われ、かつconfiguring itすることができます。
は今、あなたは、IIS上で、新しく作成されたWebサイトへの要求を行うためにあなたのコルドバアプリを変更する必要があります。それは必要あなたは同時にあなたのコルドバのアプリやウェブAPIアプリケーションをデバッグすることができます。このようにhttp://192.168.8.162:26308
またはhttp://yourMachine.yourDomain.com:26308
に要求を作るために、私はあなたが両方にブレークポイントを追加することができます意味。 それはエミュレートされたデバイスだけでなく、物理のために働きますデバイスはUSBに接続されています。あなたはyoでアクセス可能な適切な無線LANが必要になりますウル開発機械と装置。
このエラーは、いくつかの理由により発生します。
アクセスしようとしているURLが有効かどうかを確認してください。
次に、バックエンドアプリケーションでCORSが有効になっていることを確認してください。これを行うにはMicrosoft.AspNet.WebApi.Corsを使用するか、OWINを使用している場合はstartup.cs構成でapp.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)(これはから取得します。Microsoft .Owin.Cors)
あなたはこれをやって行われた後、次のようなもので、あなたのweb.configファイルと型に移動してください:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear/>
<add name="Access-Control-Allow-Credentials" value="true"/>
</customHeaders>
</httpProtocol>
</system.webServer>
これで問題が解決されます。
ウェブAPIでCORSを有効にしましたか?また、エミュレータのlocalhostは、Web APIサーバではなく、エミュレータマシンです。ネットワーク上のWeb APIサーバーを公開する必要があります。私はWindows 10でIISをリバースプロキシとして設定してIISに要求を転送するようにしました –
ありがとうございます。どうすればいいですか? –
何をしますか? CORSを有効にしますか?あなたのネットワークにあなたのWeb APIサーバーを公開しますか? IISをリバースプロキシとして構成する –