ログインページの処理をWebAPIで作成したのですが、いざ動かしてみるとエラーの出ること出ること。
前回の内容はコチラをご参考ください。
前回はXAMLの重複スタイルを別ファイルに定義することでコードをスッキリさせるところまで実装しました。 今回は…
さすがに今回は苦労しました…。
- Visual Studio 2019 Community
- Android 9.0.99
- .NETStandard.Library 2.0.3
- Prism.Unity.Forms 7.1.0.431
- Newtonsoft.Json 12.0.2
- .NET Framework 4.7.2(WebAPIプロジェクト)
今回対応したエラー内容一覧
先に一覧にしておきます。
- An error occurred while sending the request
- Failed to connect to localhost/127.0.0.1:44341
- Cleartext HTTP traffic to 127.0.0.1 not permitted
ソースコードに関しては割愛します。WebAPIに対してGetリクエストを投げるだけの簡単なモノなので。
An error occurred while sending the request
正直このエラーが一番大変でした。というのも明確な例外発生内容が出力されないので。
前提・実現したいことC#とXamarinでhttpsでPostを飛ばすプログラムをしたいです。 昔書いて動いたはずのコードをそのままコピペしたのですが、動きません。 このエラーの対処となる可能性のある方法を教えてください。 可能性として本当に低くても結構です。 よろしくお願いします。 発生してい
私はC#でxamarinを使用する方法を学んでいます、そして私は外部のAPIにウェブリクエストをするためのアンドロイドアプリを持っています、そして私は以下のエラーを受けています。System.Net.Http.HttpRequestException: An error occurred while sending the request --->
上記を参考に、まずはAndroidプロジェクトからの参照内容を確認。
案の定『System.Net.Http』への参照が含まれていなかったため、参照を追加しました。
続いて、AndroidプロジェクトのHttpClientを確認。
『Default』設定になっていたので、『Android』に変更しました。
するとエラー内容が少し明確になりました。次に続きます。
Failed to connect to localhost/127.0.0.1:44341
ループバックアドレスを指定していたのですが、繋がらないよと言われ…。
ブラウザからアクセスしてみたところ、普通にレスポンスが返ってきたのでこれも悩みました。
I want to create a web api application to connect xamarin with android. I had tried a lot, but some connection errors are coming. My code is given below: public async Task<JsonValue> find(...
# emulatorの起動に失敗 ``` Hax is enabled Hax ram_size 0x60000000 HAX is working and emulator runs in fast virt mode. emula...
The emulator provides versatile networking capabilities that you can use to set up complex modeling and testing environments for your app.
「IIS Expressに対してアクセスできないの!?」と最初は考えてしまい、ローカルのIISに急遽デプロイ。
しかし、それでもループバックアドレス指定のリクエストは通らず…。
さらに調べてみると、Androidエミュレータからループバックアドレスを指定する場合、『127.0.0.1』ではないことが判明しました。
『localhost』の解釈を『127.0.0.1』から変更する、という方法も見つかったのですが、正直面倒だったので『10.0.2.2』を直接指定することにしました。
IISに公開していて、ポート番号も開けてあるのであれば開発PCのIPアドレスを指定してもいいのかもしれません。
.NET Frameworkで作成したサービス(WebAPIやASP.NETなど)を動かすにはIISが必要にな…
.NET系のサーバー再度プログラムを動かすにはIISへのデプロイが必要となります。 Visual Studio…
ローカルのIISにデプロイしたプログラムにはループバックアドレスでのアクセスも可能ですが、ローカルPCのIPア…
Cleartext HTTP traffic to 127.0.0.1 not permitted
画像ではループバックアドレスを示す『127.0.0.1』が表示されてしまっていますが、『10.0.2.2』でも同様のエラーが検出されました。
コチラはXamarinというよりはAndroid9.0特有の現象らしく、英語のサイトがメインでしたが日本語での解決方法も見つかりました。
Android 9(Pie)でデフォルトでHTTPS通信になったので(App Transport Security(以下ATS)みたいな感じ)、HTTP通信を許可する方法を書いておく。 時代の流れ的にはHTTPS対応する方向がベターだ...
Cleartext is disabled by default on Android 9 (Pie, API 28) devices when your application is set to target and compile against Android 9.
『Androidプロジェクト』⇒『Resources』配下に『xml』フォルダを作成し、下記のファイルを配置しました。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
次に『AndroidManifest.xml』に上記ファイルを読み込むよう追記します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.appname" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:label="Sample.Android" android:icon="@mipmap/ic_launcher"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true">
</application>
</manifest>
ここまで来てやっと、Http通信を行うことが出来るようになりました。長かった…。
まとめ
- Androidプロジェクトからの『System.Net.Http』への参照を追加する。
- Androidプロジェクトの『Http実装』を『Android』に変更する。
- ローカルのサーバーにアクセスする場合はループバックアドレスの指定を『10.0.2.2』に変更する。
- 『network_security_config.xml』を追加する。
Androidのバージョンによる壁もありましたが、なかなか大変でしたね…。
以上です。
スポンサーリンク