我正在使用一个API服务,该服务要求将Content-Type设置为application/json;charset=UTF-8。
如果我在没有 charset=UTF-8 的情况下发出请求,我会得到 406 - 不可接受。
我可以通过邮递员根据需要设置内容类型进行调用,但是如果我使用我的.Net Http客户端,则会收到错误:
System.FormatException: '值的格式 'application/json;charset=UTF-8' 无效。
无论如何,我可以解决此验证并强制 Http 客户端接受该值吗?
更新:
这是我的最新尝试,它仍然抛出错误。
Body.Headers.ContentType = new MediaTypeHeaderValue("application/json;charset=UTF-8");
更新:内容类型确实是一个无效的标头。API 开发人员应我们的要求将其删除。
尝试设置属性:
new MediaTypeHeaderValue("application/json")
{
CharSet = Encoding.UTF8.WebName
};
试试这个
HttpClient httpClient= new HttpClient();
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
<</div>
div class="one_answers"> 不确定是否仍然相关,但我最近遇到了同样的问题,并且能够通过通过以下方式设置标题来解决:
string str = $"application/vnd.fmsstandard.com.Vehicles.v2.1+json; charset=UTF-8";
client.DefaultRequestHeaders.Add("Accept", str);
尝试在 UTF-8 周围添加双引号,如下所示:
Body.Headers.ContentType = new MediaTypeHeaderValue("application/json;charset="UTF-8"");
编辑:
好的,尝试这样的事情。 它在本地使用我已经准备好的 WebApi 为我工作。 请注意,有一个标头规范,用于表示哪些内容类型将被接受,然后有一个标头用于将随请求一起发送的内容类型。 对于此示例,它们都是 JSON:
public static async Task<string> HttpClient(string url)
{
using(HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json")); // ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "");
request.Content = new StringContent("{"id" : 1}",
Encoding.UTF8,
"application/json"); // REQUEST header
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
我只向它添加了身份验证标头,它对我有用。 AuthToken
要么是字符串变量,要么是令牌本身。我省略了内容类型标题,它就可以工作了。下面是代码; Response
是必须序列化为Jobject
的字符串。
{
String Response = null;
HttpClient client = new HttpClient(CertByPass());
client.Timeout = TimeSpan.FromMinutes(5);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthToken);
Response = await client.GetStringAsync(url);
}
尝试创建一个客户端帮助程序类,如下所示:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(whatever your url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
return client;