簡體   English   中英

HttpClient 的返回響應 REST API

[英]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.JsonJsonConvert轉換此字符串

string content = await client.GetAsync(url);
dynamic json = JsonConvert.DeserializeObject(content);

根據響應,您可以將json轉換為JArrayJObjectJTokenJValueNewtonsoft.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM