gpt4 book ai didi

c# - HttpRequestMessage 的 Content-Type header 中的奇怪行为

转载 作者:可可西里 更新时间:2023-11-01 16:48:01 25 4
gpt4 key购买 nike

我尝试从 C# (.NET Core 2.2.104) 向外部 Web 服务发出正文中包含 application/json 的 HTTP POST 请求。

我已经阅读了 SO 中所有类似的问题并编写了这段代码:

            SignXmlRequestDto requestBody = new SignXmlRequestDto(p12, model.SignCertPin, model.Data);
string json = JsonConvert.SerializeObject(requestBody);

var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = ncanNodeUrl,
Headers =
{
{ HttpRequestHeader.ContentType.ToString(), "application/json" }
},
Content = new StringContent(JsonConvert.SerializeObject(json))
};

var response = await httpClient.SendAsync(httpRequestMessage);

string responseString = await response.Content.ReadAsStringAsync();

我从服务中收到一个错误,它说:“无效的 header Content-Type。请将 Content-Type 设置为 application/json”。有趣的是,如果我模拟这个来自 Postman 的请求,那么一切正常,我会得到成功的响应。 enter image description here

更新:正如@Kristóf Tóth 所建议的,我将代码修改为:

            var httpRequestMessage = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = ncanNodeUrl,
Content = new StringContent(json, Encoding.UTF8, "application/json")
};

var response = await httpClient.SendAsync(httpRequestMessage);

string responseString = await response.Content.ReadAsStringAsync();

但它仍然给我同样的错误信息。

最佳答案

Content-Type 是一个content 标题。它应该在内容上设置,而不是请求本身。这可以使用 StringContent(string,Encoding,string) 来完成构造函数:

Content = new StringContent(JsonConvert.SerializeObject(json),Encoding.UTF8, "application/json")

或者通过设置 StringContent 的 Headers.ContentType属性:

var content=new StringContent(JsonConvert.SerializeObject(json));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

关于c# - HttpRequestMessage 的 Content-Type header 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com