3

所以我有这个应用程序,它需要从我不知道架构的表中查询 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();
4

3 回答 3

2

是的,你可以做到。有一个很好的入门方法:http ://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/

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

于 2010-03-03T11:41:09.920 回答
0

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

那么为什么我将@Jason 的答案标记为有效?因为我的假设是错误的。即使您不知道表的架构,也有一种方法可以查询 Azure 表中的实体。Jason 的帖子为我指明了方向。

于 2010-03-06T12:42:36.073 回答
0

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

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

于 2010-07-29T21:47:45.670 回答