从Azure存储中加载XDocument的正确方法是什么?

本文关键字:方法 是什么 XDocument Azure 存储 加载 | 更新日期: 2023-09-27 18:02:55

我正试图将我网站的所有文件检索移动到Azure存储(据说是为了使检索文件减少由于路径问题而容易出错)。这件事并不像听起来那么容易。我能够访问存储帐户和容器并将blob加载到变量中,但我找不到任何方法将内容加载到XDocument中。我已经尝试了几乎所有与文件相关的方法,这些方法显示在我的blob变量的智能感知下。

[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文件内容到XDocument或XElement在任何地方在网络或这里在SO。谢谢你的帮助。

这并不重要,但这里有一个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>

从Azure存储中加载XDocument的正确方法是什么?

最简单的方法是将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;
    }