带有标头和正文的 HTTPClient 发布请求
Posted
技术标签:
【中文标题】带有标头和正文的 HTTPClient 发布请求【英文标题】:HTTPClient Post Request with Headers and Body 【发布时间】:2019-05-26 17:12:50 【问题描述】:我想使用 HttpClient 设置 Content-Type 和 Authorization Headers 并想为 body(request) 加载 xml 文件并发送 Post 请求。
我已经搜索了将标头和正文结合起来的 Post 请求。
使用 HttpRequestMessage 设置标头。
HttpClient clientTest = new HttpClient();
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post,url);
httpRequest.Content = new StringContent(string.Empty, Encoding.UTF8, "application/vnd.citrix.sessionparams+xml");
httpRequest.Headers.Authorization = new AuthenticationHeaderValue("CitrixAuth", "H4sIAAAAAAAEAK1X2Y6jyBL9lZLnEbnZt1J");
设置 xml 正文 -
XDocument xml = XDocument.Load("RequestSession.xml");
转换为 Document.ToString()
var httpContent = new StringContent(xml.Document.ToString(), Encoding.UTF8, "application/vnd.citrix.sessionstate+xml");
请帮助我结合使用 HttpClient 的 Post Request 的标头和正文。
【问题讨论】:
您只需发送HttpRequestMessage
。我不明白你所说的“combine”是什么意思:var response = await clientTest.SendAsync(httpRequest);
Crowcoder - 感谢您的回复。我有帖子请求的标题和正文。您正在发送请求的标头 - httpRequest 对象。但我有一个身体 - Requessession.xml 我也需要为 PostAsync 发送这个。
是的,它就是这样工作的。您设置标题。你设置身体。你发送请求。请更好地解释问题。
它给了我“错误请求”作为响应,因为我忽略了要发送的正文。
【参考方案1】:
我不知道这是否是对您正在调用的服务的有效请求,但要设置标头和正文并发送请求,它将如下所示:
HttpClient clientTest = new HttpClient();
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post,url);
httpRequest.Content = new StringContent(xml.Document.ToString(), Encoding.UTF8, "application/vnd.citrix.sessionstate+xml");
httpRequest.Headers.Authorization = new AuthenticationHeaderValue("CitrixAuth", "H4sIAAAAAAAEAK1X2Y6jyBL9lZLnEbnZt1J");
var response = await clientTest.SendAsync(httpRequest);
如果您收到 400 错误请求,那是因为您发送的 what 不适合 API,而不是因为您发送的 方式。
【讨论】:
谢谢。有效。我没有在 StringContent 类中发送正文内容。这就是我收到错误请求响应的原因。感谢您的解决方案。以上是关于带有标头和正文的 HTTPClient 发布请求的主要内容,如果未能解决你的问题,请参考以下文章
HttpClient postasync,带有自定义标头和应用程序/json,用于正文 C#
如何使用标头、有效负载和正文制作 httpclient 获取请求?角度 API
使用“application/x-www-form-urlencoded”内容类型请求标头时,未正确发送 HttpClient 后正文参数
带有标头和原始 json 正文的 Volley POST 请求