如何从 Web api 将数据获取到 C# Windows 窗体应用程序类

问题描述 投票:0回答:1

我正在尝试制作一个 Windows 窗体程序,可以通过 Web API 搜索电影和连续剧。然后,程序需要将所有相关信息显示到表单上。

我在让程序从 Web API 读取数据时遇到了困难。经过一番搜索,我决定把它放在这里。

我有一些代码主要基于这篇文章:https://learn.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-网络客户端

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new App());
    }

    static HttpClient client = new HttpClient();

    static async Task RunAsync()
    {
        // Update port # in the following line.
        client.BaseAddress = new Uri("http://www.omdbapi.com/?apikey=caa4fbc9&t=it");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

    }

    static async Task<Film> GetFilmAsync(string path)
    {
        Film film = null;
        HttpResponseMessage response = await client.GetAsync(path);
        if (response.IsSuccessStatusCode)
        {
            film = await response.Content.ReadAsAsync<Film>();
        }
        return film;
    }
}

遗憾的是它没有多大作用,我不知道下一步该做什么。正如我所说,这应该从 Web api 读取数据(http://www.omdbapi.com/)。然后它必须将选定的项目放入一个类中,然后我可以用它来组成表单。

public class Film
{
    public string Title { get; set; }
    public string Released { get; set; }
    public string Runtime { get; set; }
    public string Genre { get; set; }
    public string Director { get; set; }
    public string Actors { get; set; }
    public string Plot { get; set; }
    public string Language { get; set; }
    public string imdbRating { get; set; }
    public string totalSeasons { get; set; }
    public string Type { get; set; }
}

希望大家能帮忙!任何事情都值得赞赏!

c# restful-url omdbapi
1个回答
1
投票

我对你的代码做了一些更改,它似乎运行良好:

async void Main()
{
    await InitClient();

    // Pass the file title to the API
    var result = await GetFilmAsync("it");
    client.CancelPendingRequests();
    client.Dispose();    
}

// Changed name to be more meaningful 
static async Task InitClient()
{
    // Remove the part with your key and the film title from the general initialization
    client.BaseAddress = new Uri("http://www.omdbapi.com/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));

}

static async Task<Film> GetFilmAsync(string title)
{
    Film film = null;

    // Compose the path adding the key and the film title
    string path = "?apikey=caa4fbc9&t=" + title;
    HttpResponseMessage response = await client.GetAsync(path);
    if (response.IsSuccessStatusCode)
    {
        string data = await response.Content.ReadAsStringAsync();

        // This is the key point, the API returns a JSON string
        // You need to convert it to your Film object.
        // In this example I have used the very useful JSon.NET library
        // that you can easily install with NuGet.
        film = JsonConvert.DeserializeObject<Film>(data);
    }
    return film;
}
© www.soinside.com 2019 - 2024. All rights reserved.