所以我有这个应用程序需要从表中查询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();
答案 0 :(得分:2)
是的,你可以做到。如何参加:http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/481afa1b-03a9-42d9-ae79-9d5dc33b9297/
有一个很好的条目它提供了一个很好的代码示例,所以我不会详细说明它。这段代码几乎就是我在AzureTableQuery项目中使用的代码,用于查找实体的属性。如果您查看代码,请查看GenericTableContext.cs和GenericEntity.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