C# Can';设置内容类型标题

C# Can';设置内容类型标题,c#,windows-phone-8.1,httpclient,flurl,C#,Windows Phone 8.1,Httpclient,Flurl,在HttpClient上设置内容类型时遇到问题。 我接着问了这个问题: 但还是没有运气 String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS); HttpClient c = new

在HttpClient上设置内容类型时遇到问题。 我接着问了这个问题: 但还是没有运气

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库,但在尝试添加“内容类型”时,它崩溃了

misused header name content-type
那么,我如何才能强制它,使它真正增加它?
提前谢谢。

我想你应该试试这个

req.Content = new StringContent(rcString, Encoding.UTF8, "application/json");
签出此链接:

编辑 删除这一行
c.DefaultRequestHeaders.TryAddWithoutValidation(“内容类型”、“应用程序/json”)并检查更新:有关非默认内容类型,请参阅


对于像
PostJsonAsync
这样的方法,使用Flurl不需要将Content Type设置为application/json。这是本例中的默认内容类型,它将为您设置。

使用Flurl最新和最好的答案是。2.0在标题部分引入了几个增强功能:

  • 它们不再有效。Flurl现在在引擎盖下使用未经验证的
    tryadd
    ,因此您永远不会在
    WithHeader(s)
    方法中得到“误用的头名称”错误。(我总是发现验证行为有点过度保护。)

  • 在fluent调用中,它们是在单个请求级别而不是
    FlurlClient
    级别设置的,因此在重用客户端时不会遇到问题

  • 由于连字符在标题名中很常见,但在C#标识符中不允许使用,因此有一种方法可以将下划线转换为连字符,这样在指定多个字符时就不必放弃对象表示法:

    url.WithHeaders(new { Content_Type = "foo", ... }
    

  • 现在,正在设置标题,这是一件事。但我得到了403分。然而,在Postman中,请求返回json。@TimRijckaert这意味着它无法接受json结果。嗯,是的,我现在看到问题了。我的一个标题有“\”值“\”。所以我需要取消对字符串的替换,因为它似乎是我的一个参数被错误地转换了,所以我将再次尝试Flurl,因为它大大简化了代码。谢谢,直到你遇到一个api,它实际上要求你在POST请求上设置一个内容类型头:-/@qes你是说你发布的是JSON格式的数据,而api要求你设置一个除application/JSON以外的内容类型吗?@ToddMenier这是一个用于航班数据的soap xml api,我必须在发布xml时将其设置为text/xml请求主体,否则api返回415。我可能错过了,但我不知道如何让Flurl做到这一点。Ajay在上面使用HttpClient的解决方案对我来说是可行的。@ToddMenier是的,它会导致一个无效的操作异常:头名称被误用。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用,内容头与HttpContent对象一起使用。它来自System.Net.Http.Headers.HttpHeaders.Add(…)