簡體   English   中英

Xamarin Android httpClient.getAsync導致異常

[英]Xamarin Android httpClient.getAsync causes Exception

當我打電話

public static async Task<User> GetUserAsync(string name)
    {
        try
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(Resource.RestBaseURI);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("APIKey", Resource.APIKey);

                var responseMessage = await client.GetAsync($"api/Users/{name}");
                if (!responseMessage.IsSuccessStatusCode)
                    throw new HttpResponseException(responseMessage.StatusCode);
                var userDb = responseMessage.Content.ReadAsAsync<UserDb>().Result;

                if (userDb == null)
                    throw new HttpResponseException(HttpStatusCode.NotFound);

                var user = DbClientConverter.UserDbToUser(userDb);

                user.RefuelEntityList = await RefuelEntityCommunicator.GetRefuelEntitiesAsync(user);

                return user;
            }
        }
        catch (HttpResponseException httpResponseException)
        {
            throw new HttpResponseException(httpResponseException.Response.StatusCode);
        }
        catch (HttpRequestException httpRequestException)
        {
            throw new HttpRequestException(httpRequestException.Message, httpRequestException);
        }
        catch (Exception exception)
        {
            throw new Exception(exception.Message, exception);
        }
    }

在Xamarin Android上

第12行中的await client.GetAsync導致異常:

“'System.Net.Http.FormattingUtilities'的類型初始值設定項引發了異常”

WPF應用程序中使用的相同代碼沒有問題。

任何想法如何解決這一問題?

解決方案1:似乎某些依賴項已損壞。 您是否嘗試過重新安裝NuGet軟件包?

從程序包管理器中,運行Update-Package Microsoft.AspNet.WebApi -reinstall。

解決方案2:使用NuGet安裝Web API 2.1 WebHost。

解決方案3:安裝軟件包Microsoft.AspNet.WebApi-版本5.xx

https://forums.xamarin.com/discussion/85204/problem-is-could-not-load-type-system-net-http-formattingutilities

代替

client.DefaultRequestHeaders.Add("APIKey", Resource.APIKey);

采用

client.DefaultRequestHeaders.TryAddWithoutValidation("APIKey", Resource.APIKey);

這是因為“ APIKey”是非標准的自定義標頭

我想這是ReadAsAsync擴展方法的問題。 請參閱此處以獲取自定義解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM