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

3

我正在尝试使用ASP.NET Core (也称为vNext)构建一个应用程序。我需要调用第三方REST-API。传统上,我会使用HttpClient。然而,我似乎无法让它工作。在我的project.json文件中,我有:

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

当我运行dnu restore时,出现了一个错误,提示:"无法找到 Microsoft.Net.Http.Client >= 1.0.0-*"。这位评论者提到的其他文章已经过时。
我正在 Mac OS X 上构建此应用程序,但我认为这没有任何影响。那么,HttpClient是调用第三方 REST API 的推荐方法吗?如果不是,我应该使用什么?如果是,我的做法有什么问题?
谢谢!

可能是ASP.NET 5.0中未找到HttpClient?的重复问题。 - Patrick Hofman
无法回答你的二进制缺失问题,但是HttpClient是API的首选(新版本),应该使用它而不是WebClient。 - Jamie Pollard
@PatrickHofman 那种方法似乎已经过时了。但是,我尝试了在 GitHub 仓库 中找到的方法,但仍然遇到了相同的错误。 - Some User
好的,我撤回了我的关闭投票。 - Patrick Hofman
2个回答

4
你尝试过使用Microsoft ASP.NET Web API 2.2客户端库吗?
只需要在你的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找到详细的教程。

2
我正在查看该软件包的NuGet页面。最早的版本号是2.0.20505。你的项目指定了任何1.0.0-*的东西。似乎这将排除2.X版本。尝试只指定最新版本2.2.29
请注意,我不是完全熟悉vNext如何解析软件包,因此1.0.0.0-*很可能会引入2.X软件包,我的答案只是基于语法的猜测。如果行不通,请告诉我,我会删除我的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接