带有标题和内容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
来查看展开的异常。我现在只是猜测,但我想知道您的 baseUri
和 authorizationUri
是否都是绝对的,这可能会导致异常。
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 [重复]