【问题标题】:Sys.WebForms.PageRequestManagerTimeoutException: Sys.WebForms.PageRequestManagerTimeoutException: The server request timed outSys.WebForms.PageRequestManagerTimeoutException: Sys.WebForms.PageRequestManagerTimeoutException: 服务器请求超时
【发布时间】:2021-11-25 18:57:20
【问题描述】:

当我调用添加“await”关键字并在删除“await”关键字时得到输出时出现此错误

代码:

 public class ApiHelper : IApiHelper
    {
        private const int APiRetryCount = 4;

        private static HttpClient client = new HttpClient();


        public async Task<string> PostAsync<T>(T payload, string apiEndpoint)
        {
            for (int i = 0; i < APiRetryCount; i++)
            {
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.BaseAddress = new Uri("http://app-et-csswrapperapi-dev.azurewebsites.net/");
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + token.AccessToken);
                    
                    var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json");
                    var response = **await** client.PostAsync(apiEndpoint, content);
            }

            // if we got here, we have maxed out retry count and got transient failures or are not authorized
            // log warning
            return default(string);
        }
    }

我遇到了异常: Sys.WebForms.PageRequestManagerTimeoutException: Sys.WebForms.PageRequestManagerTimeoutException: 服务器请求超时

但是当我换行时

var response = **await** client.PostAsync(apiEndpoint, content);

使用下面的代码,它的工作正常:

var response = client.PostAsync(apiEndpoint, content).Result;

我怀疑 await.Result() 之间有什么区别??

【问题讨论】:

    标签: c# api asp.net-core asp.net-web-api async-await


    【解决方案1】:

    您的代码没有任何问题。这是要走的路var response = await client.PostAsync(apiEndpoint, content);。我怀疑您在方法PostAsync 之外的代码中遇到了死锁。确保在调用时使用 await:await PostAsync&lt;SomeClass&gt;(instance,"/api/endpoint");,并且一直使用 async/await 直到控制器。

    编辑:你也可以检查这个答案:https://stackoverflow.com/a/15022170/1817574

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多