[英]Return response of HttpClient over REST API
我是使用 .net 編程的新手,並且正在為我的 REST API 在 Z1848E7322148CCE0FZ 內核上的返回結果而苦苦掙扎。 在使用斷點檢查值“內容”時,我檢查了該值(來自 HTTPClient 的 JSON 結果)是否在其中,但我無法返回該值。 您可能有一個想法,可能導致問題的原因是什么? 運行此代碼時
// GET: api/<MigrationDate>
[HttpGet]
public async Task<IEnumerable<string>> GetAsync()
{
var url = "https://myurl.com/Api/v1/bla/bla";
using var client = new HttpClient(new HttpClientHandler()
{
Credentials = new NetworkCredential("username", "password")
});
var result = await client.GetAsync(url);
var content = await result.Content.ReadAsStringAsync();
return (IEnumerable<string>)result;
}
我收到這條消息:
System.InvalidCastException:無法將“System.Net.Http.HttpResponseMessage”類型的 object 轉換為“System.ZA9FC91939A389C7C73E7A3F3CBF411CD.SystemString]”類型。
出現您的問題,因為您嘗試將response
轉換為IEnumerable<string>
。 但是響應來自HttpMessageResponse
類型,並且不提供轉換為IEnumerable<string>
的方法。
1.) 通過 NuGet-Marketplace 在您的項目中包含Newtonsoft.Json
(右鍵單擊您的項目 -> 管理 NuGet 包)
2.) 添加
using Newtonsoft.Json
using Newtonsoft.Json.Linq
到您各自的 class
3.) content
包含 Json 作為字符串,因此要使用 object,您必須使用來自Newtonsoft.Json
的JsonConvert
轉換此字符串
string content = await client.GetAsync(url);
dynamic json = JsonConvert.DeserializeObject(content);
根據響應,您可以將json
轉換為JArray
、 JObject
、 JToken
或JValue
從Newtonsoft.Json.Linq
。 例如,如果您有這樣的 json 數組:
[
{
"name":"Max",
"age": "29"
}
]
您可以將content
轉換為JArray
並像這樣使用它:
string content = await client.GetAsync(url);
dynamic json = JsonConvert.DeserializeObject(content);
JArray jsonArray = (JArray)json;
// print the name
string name = jsonArray.First["name"];
Console.WriteLine(name);
如錯誤消息所述; 您正在嘗試將 HttpResponseMessage 轉換為無法完成的字符串列表。 不要使用結果(HttpResponseMessage),而是使用您的內容字符串並將字符串序列化為您預期的返回類型。
這是一個示例,如果內容是 application/json 並使用 Newtonsoft.Json
[HttpGet]
public async Task<IEnumerable<string>> GetAsync()
{
var url = "https://myurl.com/Api/v1/bla/bla";
using var client = new HttpClient(new HttpClientHandler()
{
Credentials = new NetworkCredential("username", "password")
});
var result = await client.GetAsync(url);
var content = await result.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<string>>(content);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.