0

私はモノドロイドに取り組んでいます。Dropnet DLL を追加しました (Monodevelop でコンパイルしました)。

アカウント情報を取得しようとしています。以下は私のコードです

DropNetClient _client;
string dropbox_appkey = "XXX";
string dropbox_appsecret = "XXXX";
_client = new DropNetClient(dropbox_appkey, dropbox_appsecret);
_client.UserLogin = new DropNet.Models.UserLogin { Token = "XXX", Secret = "XXXX" };
var accountInfo = _client.AccountInfo();

以下のコードが実行されるとエラーが発生します

return (HttpWebResponse)request.GetResponse();

受信したエラーは次のとおりです。

System.Net.WebException: 応答ストリームの取得エラー (書き込み: 認証または復号化に失敗しました。): SendFailure ---> System.IO.IOException: 認証または復号化に失敗しました。---> Mono.Security.Protocol.Tls.TlsException: サーバーから無効な証明書を受け取りました。エラー コード: Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates で 0xffffffff800b010a (Mono.Security.X509.X509CertificateCollection 証明書) [0x00000] で:0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate .ProcessAsTls1 () [0x00000] in :0 at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in :0 at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol .Tls.TlsStream handMsg) [0x00000] in :0 at Mono.

次のようなブラウザーで URL を実行すると:

https://api.dropbox.com/1/account/info?oauth_consumer_key=XXXX&oauth_nonce=3064850&oauth_signature_method=PLAINTEXT&oauth_timestamp=1347899148&oauth_token=XXXX&oauth_version=1.0&oauth_signature=XXX%26XXX

次のような適切な応答が得られます。

{"referral_link": "https://www.dropbox.com/referrals/XXXX", "display_name": "XXX XXX", "uid": XXXX, "country": "IN", "quota_info": {"共有": XXX、"クォータ": XXXX、"通常": XXXX}、"メール": "XXXX@gmail.com"}

私の質問は、Monodroid Emulator を使用して奇妙なエラーが発生する理由です (私は Monodevelopバージョン 3.0.4.6を使用しており、 API_10 EMulatorでテストしています。

私は何をすべきか?

ノート:

追加するだけで、デスクトップアプリケーションで認証して取得したドロップボックスの認証トークンを使用します。デスクトップアプリケーションをモバイルアプリケーションに使用するユーザーのトークンを再利用できると思います。右?

4

1 に答える 1

1

Android用のMonoでRestSharpを使用すると、同様の問題が発生しました。原因は、開発環境の無効な証明書でした。ドメインに静的 IP アドレス (192.168.1.122) を使用していたので、電話が開発マシンの Web サービスに接続できました。Web リクエストを行う前に次の行をどこかに追加することで、これをオーバーライドできます。

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
于 2012-11-28T17:11:40.423 に答える