API Get 需要 Content-Type application/json;charset=UTF-8 - Htt



我正在使用一个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;

相关内容

最新更新