无法设置 Content-Type header
Can't set Content-Type header
我在设置 HttpClient 上的 Content-Type 时遇到问题。
我跟着这个问题:
但是还是不行。
String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS);
HttpClient c = new HttpClient();
c.BaseAddress = new Uri(BASE_URL);
c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); //Keeps returning false
c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", hash_aes);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-app", Constant.APP_ID);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-user", user_guid);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_CHECKS + "/fetch");
req.Content = new StringContent(rcString);
await c.SendAsync(req).ContinueWith(respTask =>
{
Debug.WriteLine("Response: {0}", respTask.Result);
});
我也尝试使用 Flurl 库,但是在尝试添加 'Content-Type'.
时它崩溃了
misused header name content-type
那么我怎样才能强制它让它真正添加呢?
提前致谢。
我想你应该试试这个
req.Content = new StringContent(rcString, Encoding.UTF8, "application/json");
查看此链接:
编辑
删除此行c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
并检查
更新:请参阅 了解非默认内容类型
使用 Flurl,对于 PostJsonAsync
这样的方法,您不需要将 Content-Type 设置为 application/json。这是本例中的默认内容类型,将为您设置。
Flurl 对这个问题的最新最好的回答是 upgrade。 2.0 在 header 部门引入了多项增强功能:
它们不再经过验证。 Flurl 现在在后台使用 TryAddWithoutValidation
,因此您永远不会在使用 WithHeader(s)
方法时遇到 "misused header name" 错误。 (我总是发现验证行为有点过度保护。)
在流畅的调用中,它们是在个人请求级别而不是 FlurlClient
级别设置的,因此您不会 运行 进入 concurrency issues 时重用客户端。
由于连字符在 header 名称中很常见,但在 C# 标识符中不允许使用,因此有一个 new convention 下划线被转换为连字符,因此您不必放弃object 指定多个时的表示法:
url.WithHeaders(new { Content_Type = "foo", ... }
我在设置 HttpClient 上的 Content-Type 时遇到问题。 我跟着这个问题: 但是还是不行。
String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS);
HttpClient c = new HttpClient();
c.BaseAddress = new Uri(BASE_URL);
c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); //Keeps returning false
c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", hash_aes);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-app", Constant.APP_ID);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-user", user_guid);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_CHECKS + "/fetch");
req.Content = new StringContent(rcString);
await c.SendAsync(req).ContinueWith(respTask =>
{
Debug.WriteLine("Response: {0}", respTask.Result);
});
misused header name content-type
那么我怎样才能强制它让它真正添加呢? 提前致谢。
我想你应该试试这个
req.Content = new StringContent(rcString, Encoding.UTF8, "application/json");
查看此链接:
编辑
删除此行c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
并检查
更新:请参阅
使用 Flurl,对于 PostJsonAsync
这样的方法,您不需要将 Content-Type 设置为 application/json。这是本例中的默认内容类型,将为您设置。
Flurl 对这个问题的最新最好的回答是 upgrade。 2.0 在 header 部门引入了多项增强功能:
它们不再经过验证。 Flurl 现在在后台使用
TryAddWithoutValidation
,因此您永远不会在使用WithHeader(s)
方法时遇到 "misused header name" 错误。 (我总是发现验证行为有点过度保护。)在流畅的调用中,它们是在个人请求级别而不是
FlurlClient
级别设置的,因此您不会 运行 进入 concurrency issues 时重用客户端。由于连字符在 header 名称中很常见,但在 C# 标识符中不允许使用,因此有一个 new convention 下划线被转换为连字符,因此您不必放弃object 指定多个时的表示法:
url.WithHeaders(new { Content_Type = "foo", ... }