如何在 ASP.NET 核心应用程序中使用 HttpClient

How to use HttpClient in ASP.NET Core app

我正在尝试使用 ASP.NET 核心(又名 vNext)构建应用程序。我需要调用第三方 REST-API。传统上,我会使用 HttpClient。但是,我似乎无法让它工作。在我的 project.json 文件中我有:

"dependencies": {
    "Microsoft.Net.Http.Client": "1.0.0-*"
}

当我 运行 dnu restore 时,我收到一条错误消息:"Unable to locate Microsoft.Net.Http.Client >= 1.0.0-*"。评论者提到的另一个 post 已过时。

我正在 Mac OS X 中构建此应用程序。我认为这没有什么不同。不过,HttpClient 调用第三方 REST 的推荐方法是 API 吗?如果没有,我应该使用什么?如果是,我做错了什么?

谢谢!

我正在查看 NuGet page for that package。最早的版本号是2.0.20505。您的项目指定了 1.0.0-* 的任何内容。似乎这样会排除 2.X 版本。尝试只指定最新版本 2.2.29.

请注意,我不是 100% 熟悉 vNext 如何解析包,因此 1.0.0.0-* 可以很好地引入 2.X 包,我的回答只是基于语法的猜测。如果它不起作用,请告诉我,我会删除我的答案。

你试过了吗Microsoft ASP.NET Web API 2.2 Client Library

只需添加对您的 project.json 文件的引用,如下所示:

"dependencies": {
    "Microsoft.AspNet.WebApi.Client": "5.2.3"
}

包恢复后,您可以像下面这样调用您的 Web Api:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://yourapidomain.com/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var response = await client.GetAsync("api/products/1");
    if (response.IsSuccessStatusCode)
    {
        var product = await response.Content.ReadAsAsync<Product>();
    }
}

您还可以在 http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

找到详细教程