Подтвердить что ты не робот

С#: ModernHttpClient, вы ссылаетесь на версию Portable в своем приложении - вам нужно ссылаться на версию платформы (iOS/Android)

Я использую библиотеку ModernHttpClient, и я пытаюсь получить Cookies из ответа httpClient

public static async Task<String> loginUser()
{
    var values = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("username", "*****"),
        new KeyValuePair<string, string>("password", "*****"),
    };
    NativeCookieHandler cookieHandler = new NativeCookieHandler();
    NativeMessageHandler messageHandler = new NativeMessageHandler(false, false, cookieHandler);
    var httpClient = new HttpClient(messageHandler);

    var response = await httpClient.PostAsync(RestApiPaths.LOGIN, new FormUrlEncodedContent(values));

    response.EnsureSuccessStatusCode();
    String resultString = await response.Content.ReadAsStringAsync();
    System.Diagnostics.Debug.WriteLine("resultString: " + resultString);
    IEnumerable<Cookie> responseCookies = cookieHandler.Cookies;
    Cookie mCookie = responseCookies.FirstOrDefault();
    RestApiPaths.mCookie = mCookie;
    return resultString;

}

Но приведенная ниже строка дает ошибку:

IEnumerable<Cookie> responseCookies = cookieHandler.Cookies;

Ошибка:

MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] System.Exception: You're referencing the Portable version in your App - you need to reference the platform (iOS/Android) version
[MonoDroid]   at Gogch.MyClass+<loginUser>c__async0.MoveNext () <0x9e0d9e08 + 0x004b8> in <filename unknown>:0 
[MonoDroid] --- End of stack trace from previous location where exception was thrown ---
[MonoDroid]   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x9d3a3670 + 0x00024> in <filename unknown>:0 
[MonoDroid]   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) <0x9d3a2ff8 + 0x000bb> in <filename unknown>:0 
[MonoDroid]   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) <0x9d3a2dd0 + 0x0008b> in <filename unknown>:0 
[MonoDroid]   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) <0x9d6ecaa8 + 0x0003f> in <filename unknown>:0 
[MonoDroid]   at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () <0xa1f0fa18 + 0x0001b> in <filename unknown>:0 
[MonoDroid]   at Gogch.Droid.MainActivity+<button_OnClick>c__async0.MoveNext () <0xaf58c608 + 0x00137> in <filename unknown>:0 
[MonoDroid] --- End of stack trace from previous location where exception was thrown ---
[MonoDroid]   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x9d3a3670 + 0x00024> in <filename unknown>:0 
[MonoDroid]   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (System.Object state) <0x9d3a4488 + 0x0003f> in <filename unknown>:0 
[MonoDroid]   at Android.App.SyncContext+<Post>c__AnonStorey0.<>m__0 () <0xa1f0f968 + 0x00027> in <filename unknown>:0 
[MonoDroid]   at Java.Lang.Thread+RunnableImplementor.Run () <0xa1f0f7b8 + 0x0003f> in <filename unknown>:0 
[MonoDroid]   at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) <0xa1f0f710 + 0x0003f> in <filename unknown>:0 
[MonoDroid]   at (wrapper dynamic-method) System.Object:ba036dc5-deef-4850-b986-e1e85c84e6de (intptr,intptr)
[art] JNI RegisterNativeMethods: attempt to register 0 native methods for android.runtime.JavaProxyThrowable
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: com.cinch.gogch, PID: 18910
[AndroidRuntime] java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
[AndroidRuntime]    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
[AndroidRuntime] Caused by: java.lang.reflect.InvocationTargetException
[AndroidRuntime]    at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime]    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
[AndroidRuntime]    ... 1 more
[AndroidRuntime] Caused by: android.runtime.JavaProxyThrowable: System.Exception: You're referencing the Portable version in your App - you need to reference the platform (iOS/Android) version
[AndroidRuntime]   at Gogch.MyClass+<loginUser>c__async0.MoveNext () <0x9e0d9e08 + 0x004b8> in <filename unknown>:0 
[AndroidRuntime] --- End of stack trace from previous location where exception was thrown ---
[AndroidRuntime]   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x9d3a3670 + 0x00024> in <filename unknown>:0 
[AndroidRuntime]   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) <0x9d3a2ff8 + 0x000bb> in <filename unknown>:0 
[AndroidRuntime]   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) <0x9d3a2dd0 + 0x0008b> in <filename unknown>:0 
[AndroidRuntime]   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) <0x9d6ecaa8 + 0x0003f> in <filename unknown>:0 
[AndroidRuntime]   at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () <0xa1f0fa18 + 0x0001b> in <filename unknown>:0 
[AndroidRuntime]   at Gogch.Droid.MainActivity+<button_OnClick>c__async0.MoveNext () <0xaf58c608 + 0x00137> in <filename unknown>:0 
[AndroidRuntime] --- End of stack trace from previous location where exception was thrown ---
[AndroidRuntime]   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x9d3a3670 + 0x00024> in <filename unknown>:0 
[AndroidRuntime]   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (System.Object state) <0x9d3a4488 + 0x0003f> in <filename unknown>:0 
[AndroidRuntime]   at Android.App.SyncContext+<Post>c__AnonStorey0.<>m__0 () <0xa1f0f968 + 0x00027> in <filename unknown>:0 
[AndroidRuntime]   at Java.Lang.Thread+RunnableImplementor.Run () <0xa1f0f7b8 + 0x0003f> in <filename unknown>:0 
[AndroidRuntime]   at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) <0xa1f0f710 + 0x0003f> in <filename unknown>:0 
[AndroidRuntime]   at (wrapper dynamic-method) System.Object:ba036dc5-deef-4850-b986-e1e85c84e6de (intptr,intptr)
[AndroidRuntime]    at mono.java.lang.RunnableImplementor.n_run(Native Method)
[AndroidRuntime]    at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
[AndroidRuntime]    at android.os.Handler.handleCallback(Handler.java:746)
[AndroidRuntime]    at android.os.Handler.dispatchMessage(Handler.java:95)
[AndroidRuntime]    at android.os.Looper.loop(Looper.java:148)
[AndroidRuntime]    at android.app.ActivityThread.main(ActivityThread.java:5443)
[AndroidRuntime]    ... 3 more

У меня этот код в PCL. Почему я получаю эту ошибку? Как правильно получить файлы cookie?

EDIT:

Теперь у меня есть библиотека modernhttpclient в моем проекте pcl и ios, чтобы он работал. Если я удалю его из проекта ios. Я получаю ту же ошибку.

4b9b3361

Ответ 1

Когда вы добавили ссылку на решение, вы добавили ссылку на проект PCL, а также проекты iOS и Android?

Это тот же пакет Nuget, но пакет android добавляет ссылку на

~\пакеты\modernhttpclient.2.4.2\Lib\MonoAndroid

iOS получает ссылку на

~\пакеты\modernhttpclient.2.4.2\Lib\Xamarin.iOS10

Я предполагаю, что это в Visual Studio? Возможно, просто удалите пакет и переустановите его (и установите его на уровне решения).

Ответ 2

Убедитесь, что ваши проекты имеют правильные ссылки на сборки:

  • Android: в папке MonoAndroid
  • iOS: в папке Xamarin.iOS10 (или MonoTouch)
  • PCL: в папке Portable-Net45+WinRT45+WP8+WPA81

Если это не помогает, я предлагаю прекратить использование ModernHttpClient из-за следующего:

  • Xamarin.iOS предоставляет функциональность ModernHttpClient из коробки (хотя и немного ограниченная).
  • Фактически, ModernHttpClient.NativeMessageHandler ничего не делает с параметром cookieHandler. Вы можете проверить его в исходном коде (Android, iOS). И вы можете просто обрабатывать файлы cookie изначально вместо использования реализаций ModernHttpClient, см. Исходный код для примеров (Android, iOS).

Ответ 3

Еще несколько разъяснений, объясняемых Юджином и Гейзенбергом. Вы оказались в ловушке от Bait and Switch"