【问题标题】:Post rest web api working from Postman but not returning any response from code in C# projectPost rest web api 从 Postman 工作,但没有从 C# 项目中的代码返回任何响应
【发布时间】:2017-06-29 08:50:55
【问题描述】:

有一个 POST rest api,以前可以通过代码工作。但最近它坏了,没有返回任何响应。但是,如果我尝试从 Postman 调用 api,那么它工作正常。

我可以通过什么方式进行调试以找到问题的根本原因?

以下是我用来调用此 post rest api 的 C# 代码

 public async Task SaveToServerAsync()
    {
        string filePath = @"<filePath>";
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
        // tried this line of code from another SO answer, but this didn't work either   
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://<server name>/");
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "d2ebf9aefbaa416adcd0");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Add("Accept", "*/*");
            client.DefaultRequestHeaders.Add("Connection", "keep-alive");

            using (var fileStream = new FileStream(filePath, FileMode.Open))
            {
                var content = new MultipartFormDataContent();
                content.Add(new StreamContent(fileStream), "file", filePath);
                content.Add(new StringContent("e8d002f9-f381-44c2-bce0-13416929f14d"), "Id");

                try
                {
                    var response = await client.PostAsync("<rest api end point>", content).ConfigureAwait(false);

                    if (response.IsSuccessStatusCode)
                    {
                        Debug.Write("Response received");
                    }
                }
                catch (Exception ex)
                {
                    Debug.Write("Exception occured");
                    Debug.Write(ex.Message);
                }
                finally
                {
                }
            }
        }
    }

它总是进入异常块,异常为“任务已取消”

当它仍然可以从邮递员工作时,我不确定如何调试它。

【问题讨论】:

  • 我不确定这是否会对您有所帮助,但我有类似的经历,我收到的响应是“任务已取消”作为 AggregateException 的一部分。对我来说,问题是超时问题。如果有帮助,请查看我的answer to a similar question 或至少查看该类似问题的其他答案。它可能会为您提供其他尝试。
  • 可能有一个内部异常 - 你找过吗?设置断点并检查异常对象
  • 哦,所以我启用了异常,可以看到有一个对象已处置异常,它表示无法访问已处置的对象。可能共享的链接可能对我有所帮助。我只是检查一下。
  • 我删除了 httpClient 的 using 语句,但仍然看到无法访问已处理对象的相同异常。
  • 如果您暂时删除您的 try/catch,它将在发生这种情况的实际行中断。然后,您有望将其缩小到正确的对象。

标签: c# rest asp.net-web-api dotnet-httpclient


【解决方案1】:

所以问题与默认情况下为 true 的 ExpectContinue 标头有关。不知何故,服务器没有正确处理它,客户端无限期地等待继续(100)消息。

暂时手动将此标头设置为 false 对我们有用:

httpClient.DefaultRequestHeaders.ExpectContinue = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2021-07-20
    相关资源
    最近更新 更多