【发布时间】:2020-10-17 14:56:28
【问题描述】:
我们如何从 Azure 表存储中读取超过 1000 行?这是我用于从表存储读取数据的代码,它只检索 1000 行:
readData()
{
var s = @$"https://{storageAccountName}.table.core.windows.net/{tableName}()";
var baseurl = $"{s}<sas-token>&$filter=Name%20eq%20'XYZ'";
var data = GetForOData(baseurl);
var responseData = data.Data.Replace(".", "_");
var odata = JsonConvert.DeserializeObject<ODataResponse>(responseData);
}
GetForOData(string url) {return InvokeForOData<Object>("GET", url, null, null);}
private static HttpResponseData InvokeForOData<T>(string method, string url, Object id, T data)
{
var Response = new HttpResponseData()
{
Code = HttpStatusCode.RequestTimeout, Data = string.Empty, Message = string.Empty
};
var PostParam = string.Empty;
if (data != null) { PostParam = data.ToString(); }
var postData = Encoding.UTF8.GetBytes(PostParam);
var request = (HttpWebRequest)WebRequest.Create(new Uri(url + (id == null ? "" : '/' + id.ToString())));
request.Method = method;
// add headers
if (postData.Length > 0)
{
using (Stream requestStream = request.GetRequestStream())
{ requestStream.Write(postData, 0, postData.Length); }
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Response.Code = response.StatusCode;
using (var stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{ Response.Data = stream.ReadToEnd(); }
}
return Response;
}
在哪里检查 x-ms-continuation-NextPartitionKey 和 x-ms-continuation-NextRowKey 并在下一个请求中使用它们?
更新:我能够找到 nextPartitionKey 和 nextRowKey 标头值。如何在下一个请求中传递这些值?
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Response.Code = response.StatusCode;
var nextPartitionKey = response.Headers["x-ms-continuation-NextPartitionKey"];
var nextRowKey = response.Headers["x-ms-continuation-NextRowKey"];
using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
Response.Data = stream.ReadToEnd();
}
}
【问题讨论】:
-
嘿,有一个 Nuget 包可以简化表存储的使用,所以你可以忘记nuget.org/packages/Azure.Storage.Blobs 之间的 HTTP
-
@Pablo Recalde 谢谢 - 所以在安装 nuger 包后,我可以删除行 var data = HttpHelper.GetForOData(baseurl) 吗?
-
@Dennis1679 谢谢 - 您建议的链接使用 LINQ (CreateQuery),我正在使用 OData 过滤器查询。很想知道我的代码中要进行的更改。