xamarin iOS использует общий проект с HttpClient не работает - PullRequest
0 голосов
/ 06 июня 2018

У меня есть проект Xamarin android, использующий общий проект для всех моих сетевых сервисов, который прекрасно работает.В этом общем проекте у меня есть класс с методом, который вызывает конечную точку REST через HttpClient.PostAsync().Сейчас я работаю над версией для iOS и подумал, что было бы довольно безболезненно просто использовать те же классы / методы, которые я уже использовал для Android, но по какой-то причине iOS не работает.

I 'Я не получаю никаких исключений, просто вызов PostAsync(), кажется, умирает и не делает ничего, что я могу сказать.Я также пробовал вызов GetAsync() с тем же результатом ... ничего не происходит.

Вот пример кода:

public class UserService
{
    public async Task<UserModel> LoginUser(UserModel userModel)
    {
        var url = new Uri(Constants.BaseUrl + "v2api/LoginUser");
        try
        {
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                string userModelString = JsonConvert.SerializeObject(userModel);
                var response = await client.PostAsync(url, new StringContent(userModelString, Encoding.Default, "application/json"));
                if (response.IsSuccessStatusCode)
                {
                    userModel = JsonConvert.DeserializeObject<UserModel>(await response.Content.ReadAsStringAsync());
                }
            }
        }
        catch (Exception e)
        {
            string exceptionString = e.ToString();
        }
        return userModel;
    }
}

Я установил все точки останова, и этопопадает в строку: v ar response = await, но это все.Я никогда ничего не получаю.Как упомянуто выше, это прекрасно работает с проектом android, только iOS не работает.Я уверен, что пропускаю что-то действительно простое, я просто не знаю, что это может быть.

Я пытался добавить это в свой файл info.plist, но это не помогло:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mysite.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true />
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false />
        </dict>
    </dict>
</dict>

есть предложения, где искать дальше?

tia

1 Ответ

0 голосов
/ 06 июня 2018

Я наконец разобрался с этим после того, как занялся поиском.Эта тема была моей точной проблемой: https://forums.xamarin.com/discussion/17086/httpclient-postasync-doesnt-work-when-awaited

Я вызывал свой метод входа в систему с помощью .Result;и, очевидно, это не работает в iOS, но странно, что это работает в Android.

Суши, спасибо за обучение в iOS Http материал:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...