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

6
我正在尝试从C#代码中调用API。我无法获得响应,并收到状态码"500 - 内部服务器错误"。
发现请求头中附加了"Charset-UTF8"的原因。
当我在Fiddler中尝试不带"Charset-UTF8"的API时,我能够在Fiddler和Postman中获得响应。带有"Charset-UTF8"会导致相同的500个内部服务器错误。内容类型为"application/json"。
我甚至尝试了从C#代码中使用每种字符集编码方法:UTF-8、16、32、unicode和默认格式,但都出现了相同的错误。
请告诉我如何从API请求头中删除CharSet(附加)。
请查看我附加的代码。
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);
    });

1
你尝试过从 https://dev59.com/9mAg5IYBdhLWcg3w0Nkz 中提出的想法吗? - mjwills
从IE浏览器中删除Cookie,然后重试。服务器可能仍在使用具有UTF8设置的旧Cookie。 - jdweng
@mjwills 谢谢你!我从你的链接中找到了解决方案。我修改了几行代码以便返回httpclient响应。 - CMNagaraj
太棒了!你能发布一下你最终得出的结果吗?这样未来的人就可以看到解决方案了。 - mjwills
2个回答

7
请尝试以下解决方案。
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仓库上提交了一个问题。

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

测试环境 .NET Core 2.0, .NET Standard 2.0


0

如果您想在请求之外删除客户端请求头:

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"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接