带有标题和内容c#的HttpClient PostAsync [重复]

Posted

技术标签:

【中文标题】带有标题和内容c#的HttpClient PostAsync [重复]【英文标题】:HttpClient PostAsync with header and content c# [duplicate] 【发布时间】:2019-03-08 00:19:41 【问题描述】:

我通过传递 requestUri 和内容来使用 HttpClient PostAsync 方法,但得到一个非常通用的错误消息:

发生了一个或多个错误

你能指导我吗?不确定是什么原因造成的。当我在邮递员中使用相同的 requestUri 和内容时,它按预期工作。

var client = new HttpClient();
var content = new StringContent(authXML);
content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
client.BaseAddress = new Uri(authorizationUri);
var result = client.PostAsync(authorizationUri, content).Result; //Generic error message "One or more errors occurred"
if (response.IsSuccessStatusCode)

    // SUCCESS
    // Do Something

else

    // ERROR
    // Do Something

【问题讨论】:

你至少能得到响应的HTTP状态码吗? 最终,您会想要使用await,但与此同时,请使用.GetAwaiter().GetResult() 而不是.Result 来查看展开的异常。我现在只是猜测,但我想知道您的 baseUriauthorizationUri 是否都是绝对的,这可能会导致异常。 One or more errors occurred 你需要学会阅读和解释整个异常。它会告诉你很多关于错误的信息! 感谢大家的回复。我有详细的例外。基本上我遇到了“System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道。” 【参考方案1】:

您需要等待或等待结果。

编辑: 发生的一个或多个错误是任务的聚合异常。你可能想要内在的

var client = new HttpClient();
var content = new StringContent(authXML);
content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
client.BaseAddress = new Uri(authorizationUri);
var post = client.PostAsync(authorizationUri, content);
try 
      post.Wait();
  
  catch (AggregateException e) 
     foreach (Exception ie in e.InnerExceptions)
        Console.WriteLine("0: 1", ie.GetType().Name,
                          ie.Message);
  

if (post.Result.IsSuccessStatusCode)

    // SUCCESS
    // Do Something

else

    // ERROR
    // Do Something

【讨论】:

你确定这绝对能解决问题吗? 是的。它解决了错误“发生了一个或多个错误”。这就是问题所在。他验证了它在邮递员中有效。其余的语法看起来不错。除了 if 语句引用了一个不存在的变量。【参考方案2】:

提供的代码示例似乎没有获得响应句柄。我认为您需要获取响应,然后将其应用于结果,如下所示:

string result;
var response = client.PostAsync(authorizationUri, content).Result;
response.EnsureSuccessStatusCode();
result = response.Content.ReadAsStringAsync().Result;

【讨论】:

以上是关于带有标题和内容c#的HttpClient PostAsync [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有其他参数的 C# HttpClient Post 字符串数组

来自 Azure 函数的 C# HttpClient POST 请求,带有用于第三方 API 的授权标记,被剥离了标头和正文

带有标题和内容c#的HttpClient PostAsync [重复]

带有自定义标头的 C# HttpClient POST 请求发送不正确的 Content-Type 标头字段

C# HttpClient 不发送 POST 变量

使用 HttpClient 将带有 post 方法的 utf8 内容发送到 android 中的服务器