如何删除 HttpClient 请求标头 C# 中的默认字符集

Posted

技术标签:

【中文标题】如何删除 HttpClient 请求标头 C# 中的默认字符集【英文标题】:How to remove the default charset in HttpClient Request Header C# 【发布时间】:2017-06-06 12:03:34 【问题描述】:

我正在尝试从C# 代码中找到API。我无法获得响应并收到状态代码“500 - 内部服务器错误”。

找到了“Charset-UTF8”被附加到请求头中的原因

当我尝试在没有“Charset-UTF8”的情况下在 Fiddler 中访问 API 时,我能够在 Fiddler 和邮递员中获得响应。使用“Charset-UTF8”我得到相同的 500 内部服务器错误。内容类型为application/json

我什至尝试了每一种字符集编码方法 UTF-8、16、32、unicode 和 C# 代码的默认格式,都给出了相同的错误。

请告诉我如何从 API 请求标头中删除 CharSet(appending)。

请查看我附上的代码

HttpClient client1 = new HttpClient();
client1.BaseAddress = new Uri("i have third party url");
client1.DefaultRequestHeaders
    .Accept
    .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
        client1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
            "Basic",
            Convert.ToBase64String(
                System.Text.ASCIIEncoding.ASCII.GetBytes(
                    string.Format("0:1", userName, password))));

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, client1.BaseAddress);


StringContent content = new StringContent(JsonConvert.SerializeObject("working request"));


request.Content = content;

client1.SendAsync(request)
    .ContinueWith(responseTask =>
    
        Console.WriteLine("Response: 0", responseTask.Result);
    );

【问题讨论】:

你尝试过***.com/questions/23161088/…的想法吗? 从您的 IE 浏览器中删除 cookie,然后重试。服务器可能仍在使用带有 UTF8 设置的旧 cookie。 @mjwills 谢谢老兄!我从您的链接中得到了解决方案。我修改了几行以获得 httpclient 响应作为回报。 太棒了!您能否发布您最终得到的结果,以便未来的人们可以看到解决方案? 【参考方案1】:

试试下面的解决方案

content.Headers.Remove("Content-Type"); // "application/json; charset=utf-8"
content.Headers.Add("Content-Type", "application/json");

content.Headers.ContentType.CharSet = string.Empty;

我在dotnet/corefx repo 上提交了一个问题。

看看https://github.com/dotnet/corefx/issues/25290

测试于 .NET Core 2.0、.NET Standard 2.0

【讨论】:

【参考方案2】:

如果要删除请求之外的客户端请求标头:

myClient.DefaultRequestHeaders.Remove("Connection");
myClient.DefaultRequestHeaders.Add("Connection", "keep-alive");
myClient.DefaultRequestHeaders.Accept.Remove(new MediaTypeWithQualityHeaderValue("application/json"));
myClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

【讨论】:

以上是关于如何删除 HttpClient 请求标头 C# 中的默认字符集的主要内容,如果未能解决你的问题,请参考以下文章

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

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

无法使用 C# HttpClient 获取任何 cookie

如何从 HttpClient.PostAsJsonAsync() 生成的 Content-Type 标头中删除 charset=utf8?

使用带有表单编码参数和标头的 C# httpclient 发布

Angular 4.3.3 HttpClient:如何从响应的标头中获取值?