我正在尝试将我的网站的所有文件检索移动到Azure存储(据推测,由于路径问题,检索文件不易出错)。这听起来并不像听起来那么容易。我能够访问存储帐户和容器并将blob加载到变量中,但我找不到任何方法将内容放入XDocument。我已经尝试了几乎所有与我的blob变量的intellisense下显示的文件相关的方法。
[TestMethod]
public void TestMethod1()
{
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["azurestorageconn"]);
var client = storageAccount.CreateCloudBlobClient();
//create a blob container with public accessibility
var sampleContainer = client.GetContainerReference(ConfigurationManager.AppSettings["azurecontainer"]);
sampleContainer.CreateIfNotExists();
sampleContainer.SetPermissions(new BlobContainerPermissions()
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
var blob = sampleContainer.GetBlockBlobReference(@"files\" + NavXmlFile);
XDocument xDoc;
//tried almost everything here
using (var xml = blob.OpenRead())
{
xDoc = XDocument.Load(xml);
}
Assert.IsNotNull(xDoc);
}
我似乎无法找到任何将xml文件内容加载到Web上或X上的XDocument或XElement中的示例。任何帮助表示赞赏。
不是它应该重要但是这里是xml文档的一个示例。
<Menus>
<Menu>
<MenuId>1</MenuId>
<ParentMenuId>0</ParentMenuId>
<MenuTitle>Home</MenuTitle>
<DisplayOrder>10</DisplayOrder>
<MenuAction>/Home/Index</MenuAction>
<MenuRoles></MenuRoles>
</Menu>
<Menu>
<MenuId>2</MenuId>
<ParentMenuId>0</ParentMenuId>
<MenuTitle>Languages</MenuTitle>
<DisplayOrder>20</DisplayOrder>
<MenuAction></MenuAction>
<MenuRoles></MenuRoles>
</Menu>
</Menus>
答案 0 :(得分:0)
事实证明,最简单的方法就是将url路径加载到XElement中,只要文件可公开访问即可。它只需要将Azure文件的url路径硬编码到您的程序中。如果你有数百个文件可以使用它,这可能会有问题。
var filepath = "yourazurefilesurlpath"
var doc = XElement.Load(filepath);
我仍然想知道如何使用原始帖子中的方法来做到这一点。
<强>更新强>
以编程方式执行此操作
var blob = AzureStorageMethods.GetAzureBlob(ConfigurationManager.AppSettings["publicfiles"], NavXmlFile);
var doc = XElement.Load(blob.Uri.AbsoluteUri);
这是blob调用的代码
public static CloudBlockBlob GetAzureBlob(string containername,string filename)
{
var creds = ConfigurationManager.AppSettings["azurestorageconn"];
var azureStorage = CloudStorageAccount.Parse(creds);
var client = azureStorage.CreateCloudBlobClient();
//create a blob container and make it publicly accessibile
var baseContainer = client.GetContainerReference(containername);
baseContainer.CreateIfNotExists();
baseContainer.SetPermissions(new BlobContainerPermissions()
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
var blob = baseContainer.GetBlockBlobReference(filename);
return blob;
}