无法对Here Maps定位终结点进行异步Post调用



当通过Postman和C#WebRequest测试调用时,它可以工作,但我无法使用带有PostAsync或PostJsonAsync调用的HttpClient执行同样的操作。

错误:不支持的媒体类型,尽管application/json是必需的并已应用。

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("https://pos.api.here.com/positioning/v1/locate?app_id={id}&app_code={code}", content);
return response;

StatusCode:415,ReasonPhrase:"不支持的媒体类型",版本:1.1,内容:System.Net.Http.HttpConnection+HttpConnectionResponseContent,标题:{日期:2019年11月8日星期五13:38:37 GMT服务器:nginxclojure内容类型:application/json内容长度:114}

WebRequest

HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
if (!string.IsNullOrEmpty(data))
{
request.ContentType =  "application/json";
request.Method =  "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(data);
streamWriter.Flush();
streamWriter.Close();
}
}
using (HttpWebResponse webresponse = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(webresponse.GetResponseStream()))
{
string response = reader.ReadToEnd();
return response;
}
}

我看到了两个区别:

  1. 您正在HttpClient代码中设置Accept标头,而您不在WebRequest代码中。这定义了接受的数据类型。如果这个API调用没有返回JSON,那么它可能只是在说"我没有什么要对你说的"。你可以试着删除整行
  2. HttpClient代码中的Content-Type将是application/json; charset=utf-8,而您在WebRequest代码中仅将其设置为application/json。我不明白为什么charset会让它窒息,但如果更改#1不起作用,你可以尝试直接设置Content-Type,看看它是否有什么不同:
var content = new StringContent("");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

最新更新