代码之家  ›  专栏  ›  技术社区  ›  Rob

方法HttpContentExtensions.ReadAsAsAsync文件未找到运行时

  •  1
  • Rob  · 技术社区  · 6 年前

    我最近在应用程序中添加了一些代码来使用webAPI。这是通过HttpClient完成的。在我的开发机器上一切正常。但一旦我发布到一个azurewebapp(直接或通过buildprocess),一旦部署了应用程序,我就会得到一个运行时错误。

    这是我得到的例外; enter image description here

    public IList<SubscriberDefinition> GetAllSubscribers()
        {
            IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);
    
            if (allSubscribers != null && allSubscribers.Count > 0)
                return allSubscribers;
    
            try
            {
                SetBearerToken(HttpClient);
                HttpResponseMessage response = HttpClient.GetAsync("api/getallsubscribers").Result;
                if (response.IsSuccessStatusCode)
                {
                    allSubscribers = response.Content.ReadAsAsync<IList<SubscriberDefinition>>().Result;
    
                    Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);
    
                    return allSubscribers;
                }
            }
            catch
            {
                return new List<SubscriberDefinition>();
            }
            return new List<SubscriberDefinition>();
        }
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rob    6 年前

    经过长时间的搜索,我发现问题是由我使用异步的方式引起的。非常感谢@JohnRasch把我推向正确的方向!

    我怀疑在许多被引用的NuGet和MyGet包中,有一个包发生了更新,导致了这个错误的发生。我更新了处理响应的方式,并将其转换为我想要的类型。这就解决了问题。虽然我仍然不完全明白这个问题的根本原因是什么,但我至少知道如何正确地解决它。

    对于这个特定的服务/API调用,我能够让它使用以下代码;

    public IList<SubscriberDefinition> GetAllSubscribers()
        {
            IList<SubscriberDefinition> allSubscribers = Caching.Get<IList<SubscriberDefinition>>(CacheKeys.ListAllSubscribers);
    
            if (allSubscribers != null && allSubscribers.Count > 0)
                return allSubscribers;
    
            try
            {
                SetBearerToken(HttpClient);
                HttpResponseMessage response = Task.Run(async () => await HttpClient.GetAsync("api/getallsubscribers")).Result;
                if (response.IsSuccessStatusCode)
                {
                    var jsonstring = response.Content.ReadAsStringAsync();
                    jsonstring.Wait();
    
                    allSubscribers = JsonConvert.DeserializeObject<IList<SubscriberDefinition>>(jsonstring.Result);
    
                    Caching.Add(CacheKeys.ListAllSubscribers, allSubscribers, ECacheDuration.TwentyFourHours);
    
                    return allSubscribers;
                }
            }
            catch
            {
                return new List<SubscriberDefinition>();
            }
            return new List<SubscriberDefinition>();
        }
    

    在另一个服务中,我们也有这个错误,在那里我们可以通过一路异步来修复它。