使用Nuget Core DLL设置包凭据

3

我想获取一个私有 feed 中的包列表,并使用 Http 认证。这是我的代码,当我调用 ListPlugins 方法时,会收到 401 错误,我该如何设置凭据?

public  class PluginManager
{
    private readonly string _pluginFolder;
    private readonly IPackageRepository _packageRepository;
    private readonly PackageManager _packageManager;

    public PluginManager(string plugInFolder, string packageRepositoryAddres)
    {
        _pluginFolder = plugInFolder;
        _packageRepository = PackageRepositoryFactory.Default.CreateRepository(packageRepositoryAddres);
        _packageManager = new PackageManager(_packageRepository, _pluginFolder);  
    }

    public IEnumerable<PluginModel> ListPlugins()
    {
        IPackage dummy = null;

        var result =  _packageManager.SourceRepository.GetPackages()
            .OrderBy(p => p.Id)
            .ToList()
            .Select(p => new PluginModel()
            {
                PackageId = p.Id,
                PackageVersion = p.Version.ToString(),
                PackageDescription = p.Description,
                IsInstalled = _packageManager.LocalRepository.TryFindPackage(p.Id, p.Version, out dummy)
            })
            .ToList();

        return result;
    }

    public void Install(string packageId, string packageVersion)
    {
        _packageManager.InstallPackage(packageId, new SemanticVersion(packageVersion));
    }

    public void Uninstall(string packageId, string packageVersion)
    {
        _packageManager.UninstallPackage(packageId, new SemanticVersion(packageVersion));
    }
}
1个回答

5

有一种方法可以实现这个功能,这就是在Visual Studio和SharpDevelop中使用NuGet的做法,即实现自己的ICredentialProvider或使用NuGet.Core中提供的SettingsCredentialProvider类。设置凭证提供程序将读取NuGet.config文件中的任何凭证。

例如,在SharpDevelop和MonoDevelop中,以下代码将使用设置提供程序和自定义提供程序:

    static void InitializeCredentialProvider()
    {
        ISettings settings = Settings.LoadDefaultSettings(null, null, null);
        var packageSourceProvider = new PackageSourceProvider(settings);
        var credentialProvider = new SettingsCredentialProvider(new SharpDevelopCredentialProvider(), packageSourceProvider);

        HttpClient.DefaultCredentialProvider = credentialProvider;
    }

至少在SharpDevelop中,自定义凭据提供程序当前没有任何作用,在Visual Studio中,它会提示用户输入凭据信息。您可以忽略设置提供程序,直接使用自定义凭据提供程序。SharpDevelop中的凭据提供程序当前的实现如下:

public class SharpDevelopCredentialProvider : ICredentialProvider
{
    public ICredentials GetCredentials(Uri uri, IWebProxy proxy, CredentialType credentialType, bool retrying)
    {
        return null;
    }
}

因此,您可以从自定义凭据提供程序类的GetCredentials方法返回您的凭据。

提供程序需要设置在HttpClient上。如果您的软件包源是URL而不是文件,则使用PackageRepositoryFactory类,因此将使用HttpClient。


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