访问Azure表实体

时间:2010-03-02 13:34:49

标签: rest azure azure-storage azure-table-storage

所以我有这个应用程序需要从表中查询Azure表存储中的实体我不知道架构。

1)有没有办法用Storageclient包装器做到这一点?
2)我猜不是,所以我尝试使用REST API,当我查询实体时,我总是得到403 Forbidden。

这是我的代码。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("http://{0}.table.core.windows.net/Tables('{1}')", account,query));
request.UserAgent = " Microsoft ADO.NET Data Services";
request.KeepAlive = true;
request.Method = "GET";
request.Headers.Add("x-ms-version", "2009-09-19");
request.Headers.Add("x-ms-date", string.Format("{0} GMT", DateTime.UtcNow.ToString ("ddd, dd MMM yyyy HH:mm:ss")));
request.Headers.Add("Authorization", string.Format("SharedKey {0}:{1}", account, key));
request.Accept = "application/atom+xml,application/xml";
request.Headers.Add("Accept-Charset", "UTF-8");
request.Headers.Add("DataServiceVersion", "1.0;NetFx");
request.Headers.Add("MaxDataServiceVersion", "1.0;NetFx");

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

3 个答案:

答案 0 :(得分:2)

是的,你可以做到。如何参加:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/

有一个很好的条目

它提供了一个很好的代码示例,所以我不会详细说明它。这段代码几乎就是我在AzureTableQuery项目中使用的代码,用于查找实体的属性。如果您查看代码,请查看GenericTableContext.csGenericEntity.cs

答案 1 :(得分:0)

我最初的问题是由于我的Autorization标题不正确。
我只是添加了密钥,实际上您需要对密钥执行一些操作,对字符串进行签名并将其添加到Autorization标头中。
更多信息here

那么为什么我认为@Jason的答案是有效的?因为我的假设是错误的。即使您不知道表的架构,也可以在Azure表中查询实体。杰森的帖子显示了我的方式。

答案 2 :(得分:0)

Windows Azure表可通过OData(odata.org)协议查询。最简单的方法是让想要获取/更新/合并/删除的实体的PartitionKey和RowKey。

所有REST示例都在那里(对于表查询和实体查询): http://msdn.microsoft.com/en-us/library/dd179423.aspx