有一个相当不错的 NuGet API 可以实现这两者。
a) 检索 NuGet 包版本(针对以下示例中的 Newtonsoft.Json 包):
GET https://api.nuget.org/v3-flatcontainer/Newtonsoft.Json/index.json
b) 下载特定版本的 NuGet 包 - 例如
GET https://api.nuget.org/v3-flatcontainer/utf8json/1.3.7/utf8json.1.3.7.nupkg
请尝试将 URL 复制到浏览器,您可以看到示例的结果...
要获取有关 API 的更多信息,请访问
Package Content
以下代码示例可以读取包的版本(使用 Microsoft.AspNet.WebApi.Client NuGet 包,该包提供 HttpContent 的 ReadAsAsync 扩展,用于将 JSON 结果解析到适当的类 - 本示例中的 VersionsResponse)
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace GetNuGetVer
{
class VersionsResponse
{
public string[] Versions { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var packageName = "Enums.NET";
var url = $"https://api.nuget.org/v3-flatcontainer/{packageName}/index.json";
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
var versionsResponse = await response.Content.ReadAsAsync<VersionsResponse>();
var lastVersion = versionsResponse.Versions[^1]; //(length-1)
// And so on ..
}
}
}
为了摆脱Microsoft.AspNet.WebApi.Client(依赖于Newtonsoft.Json),System.Text.Json 可以开箱即用(从 .NET Core 3.0 开始),代码更改如下:
using System.Text.Json;
...
var response = await httpClient.GetAsync(url);
var versionsResponseBytes = await response.Content.ReadAsByteArrayAsync();
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
var versionsResponse = JsonSerializer.Deserialize<VersionsResponse>(versionsResponseBytes, options);
var lastVersion = versionsResponse.Versions[^1]; //(length-1)
或者只是根据您自己的偏好使用不同的 JSON 解析器。