httpClient.GetAsync电话扔System.ArgumentException:无法确定JSON对象类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httpClient.GetAsync电话扔System.ArgumentException:无法确定JSON对象类型相关的知识,希望对你有一定的参考价值。
我尝试调用由httpClient.GetAsync一个获取API。但我得到异常
“System.ArgumentException:无法确定类型System.Threading.Tasks.Task
1[Newtonsoft.Json.Linq.JObject]. at Newtonsoft.Json.Linq.JValue.GetValueType(Nullable
1电流,对象的值)JSON对象类型 r n在Newtonsoft.Json.Linq.JContainer.CreateFromContent(对象内容) r n在Newtonsoft。 Json.Linq.JContainer.AddInternal(的Int32索引,对象内容,布尔skipParentCheck个) r n在MediaIngestionSFSvc.Controllers.MediaIngestionController.d__2.MoveNext()”
下面是我尝试调用API
public IActionResult GetSKUByEditionDisplayName(string edition)
{
string message = null;
try
{
if (string.IsNullOrEmpty(edition))
{
message = $"Edition is null";
throw new ArgumentNullException(message);
}
SqlQuerySpec sqlQuery = repository.GenerateQuery(CollectionName, new KeyValuePair<string, object>(Enums.id.ToString(), MediaRefreshConstants.SKUtoEditionTable));
IEnumerable<JObject> docs = repository.ReadItemAsync<JObject>(sqlQuery);
if (!docs.Any())
{
message = $"No SKUtoEditionTable found in Cosmos db";
throw new NullReferenceException(message);
}
string responseBody = JsonConvert.SerializeObject(docs);
string jsonObject = responseBody.Trim().Trim('[', ']');
JObject responseObject = JObject.Parse(jsonObject);
if (responseObject[edition] == null)
{
message = $"No Edition {edition} found in SKUtoEditionTable";
throw new NullReferenceException();
}
string sku = responseObject[edition].ToString();
return CreateActionResult(HttpStatusCode.OK, sku);
} catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException)
{
message = $"Fail to retrieve sku from EditionToSKUTypeMapping table";
return CreateActionResult(HttpStatusCode.BadRequest, e.ToString());
} catch (Exception ex)
{
message = $"Fail to retrieve sku from EditionToSKUTypeMapping table";
return CreateActionResult(HttpStatusCode.InternalServerError, ex.ToString());
}
}
不知道发生什么事,有人可以给我一些帮助吗?
您收到的即时错误是因为你不await
的repository.ReadItemAsync<JObject>
电话。因此,返回类型Task<JObject>
,不JObject
。
更改
IEnumerable<JObject> docs = repository.ReadItemAsync<JObject>(sqlQuery);
至
IEnumerable<JObject> docs = await repository.ReadItemAsync<JObject>(sqlQuery);
话虽这么说,也有一些可能会导致问题的其他事情。如果你是一个序列化数组对象,然后修剪掉[
和]
,它不再是有效的JSON,如果有原始数组中多个元素。此外,序列化对象以JSON立即反序列化是一个有点古怪,可能值得重新思考。
我通过这种方式解决此问题:这是原来的逻辑:公共异步任务A(URI字符串,字符串的contentType){HttpResponseMessage httpResponseMessage =等待httpClient.GetAsync(URI);返回httpResponseMessage; }
private async Task<string> B(string edition)
{
HttpResponseMessage keyValueResponse = await new HttpHelper().A(keyPairUrl, JsonContentTypeHeaderValue);
string responseBody = await keyValueResponse.Content.ReadAsStringAsync();
return responseBody.Trim();
}
private async<JObject> C() {
JObject object = new JObject();
object["s"] = await B(some string);
return object;
}
它会抛出异常上面:但是,如果我改变的await B(somestring);到B(somestring)。结果;这个问题将不复存在。
我很为C#,谁能告诉我,为什么会发生?是否有任何其他更好的办法来解决这个问题。
以上是关于httpClient.GetAsync电话扔System.ArgumentException:无法确定JSON对象类型的主要内容,如果未能解决你的问题,请参考以下文章
HttpClient.GetAsync,无效的 URI 异常
使用 HttpClient.GetAsync() 时如何确定 404 响应状态
HttpClient.GetAsync 一次只执行 2 个请求?
如何阻止 HttpClient.GetAsync(uri) 挂起? [复制]
在 Azure Function 上获取数据时,HttpClient.GetAsync() 会产生 AggregateException