la réponse de Athlectual ne semble pas appliquer à l'ensemble NuGet courant openstack.net, mais je l'ai réussi à le faire fonctionner avec la dernière version (1.1.2.1) par essais et erreurs. Espérons que cela aidera les autres
Dans mon cas, il semble que je ne devais pas définir l'URL Temp métadonnées clés comme l'un était déjà défini, doit être généré de manière aléatoire lorsque le compte a été créé. Donc, le code pour obtenir l'URL temp qui fonctionne est le suivant.
N.B. J'ai utilisé Nom d'utilisateur et APIKey pour m'authentifier. Je suppose que vous pouvez utiliser le mot de passe à la place. APIKey peut être trouvé sous les détails de votre compte sur le site Web Rackspace Cloud Control Panel.
private static string GetCloudFilesTempUrl(Uri storageUrl, string username, string apiKey, string containerName, string filename)
{
var cloudIdentity = new CloudIdentity()
{
Username = username,
APIKey = apiKey
};
var provider = new CloudFilesProvider(cloudIdentity);
var accountMetaData = provider.GetAccountMetaData();
var tempUrlKey = accountMetaData["Temp-Url-Key"];
//Set the link to expire after 60 seconds (in epoch time)
var epochExpire = ((int) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds) + 60;
//The path to the cloud file
var path = string.Format("{0}/{1}/{2}", storageUrl.AbsolutePath, containerName, filename);
var hmacBody = string.Format("GET\n{0}\n{1}", epochExpire, path);
var hashSaltBytes = Encoding.ASCII.GetBytes(tempUrlKey);
string sig;
using (var myhmacMd5 = new HMACSHA1(hashSaltBytes))
{
var ticketBytes = Encoding.ASCII.GetBytes(hmacBody);
var checksum = myhmacMd5.ComputeHash(ticketBytes);
var hexaHash = new StringBuilder();
foreach (var b in checksum)
{
hexaHash.Append(String.Format("{0:x2}", b));
}
sig = hexaHash.ToString();
}
var cloudFileUrl = string.Format("https://{0}{1}", storageUrl.Host, path);
//Compile the temporary URL
return string.Format("{0}?temp_url_sig={1}&temp_url_expires={2}", cloudFileUrl, sig, epochExpire);
}
Je ne sais pas comment vous êtes censé obtenir l'URL de stockage, mais à travers tâtonne plus j'ai réussi ceci:
private static string GetCloudFilesStorageUrl(string username, string apiKey)
{
var cloudIdentity = new CloudIdentity()
{
Username = username,
APIKey = apiKey
};
var identityProvider = new CloudIdentityProvider(cloudIdentity);
return identityProvider.GetUserAccess(cloudIdentity)
.ServiceCatalog
.Single(x => x.Name == "cloudFiles")
.Endpoints[0].PublicURL;
}
Comme mentionné, je ne devais pas régler la Temp URL Key, et je ne vais probablement pas essayer au cas où je casse quelque chose qui fonctionne! Si vous avez besoin si je suppose que ce qui suit devrait faire l'affaire:
private static void SetCloudFilesTempUrlKey(string username, string apiKey, string tempUrlKey)
{
var cloudIdentity = new CloudIdentity()
{
Username = username,
APIKey = apiKey
};
var provider = new CloudFilesProvider(cloudIdentity);
provider.UpdateAccountMetadata(new Metadata
{
{ "Temp-Url-Key", tempUrlKey }
});
}