【问题标题】:exclude partitionkey and rowkey in web api response of azure table storage在 Azure 表存储的 Web api 响应中排除 partitionkey 和 rowkey
【发布时间】:2016-10-31 14:27:02
【问题描述】:

我在网上搜索,但没有找到任何解决方案。请帮助我解决这个问题。

问题:我有一个带有 azure 表存储的 webapi,当我查询 azure 表时,webapi json 响应包含在 partitionkey 和 rowkey 中。 我希望使用 azure 表的 partitionkey 和 rowkey 排除我的 web api 响应。

当前输出:{"partitionkey":"test","Rowkey":"abc","name":"user","email":" test@test.com","domain":"qwe"}

预期输出: {"name":"user","email":"test@test.com","domain":"qwe"}

【问题讨论】:

  • 欢迎来到stackoverflow。你的问题不清楚。您是否要求我们提供完成的工作?如果是这样,那不是我们在这里所做的。您是否已经编写了一些代码并且它不起作用?如果是,请提供代码和错误消息。

标签: azure asp.net-web-api2 azure-storage azure-table-storage


【解决方案1】:

当我查询天蓝色表时,webapi json 响应包含在 partitionkey 和 rowkey 中。我希望使用 azure 表的 partitionkey 和 rowkey 排除我的 web api 响应。

在从 Azure 表存储中选择实体时,您可以尝试使用 查询投影 从实体返回一组有限的属性。以下查询供您参考。

TableQuery<EmployeeEntity> EmpQuery = table.CreateQuery<EmployeeEntity>();
var query = (from ep in EmpQuery
             where ep.PartitionKey == "pkvalue" && ep.RowKey== "rkvalue"
             select new { Fname = ep.FirstName, Lname = ep.LastName}).AsTableQuery();
var emps = query.Execute();

【讨论】:

    【解决方案2】:

    您可以使用TableQuery 类中的属性SelectColumns 来指定要从Azure 存储表服务中查询的列。

    【讨论】:

    • 我在表中有 20 列(我在 diff 查询中有 10 个表),我们只需删除分区键和行键、时间戳...
    • 我在每个表中有 20 列(在 diff 查询中总共有 10 个表),而不是将所有列添加为选定列,我们可以只删除 partitionkey , rowkey 和时间戳。
    • 抱歉,我不知道如何排除列。
    • 使用 Azure 表,您只能指定您希望服务返回的列(属性)。要删除某些内容,您需要在代码中进行处理。 HTH。
    • 正如 Gaurav 所说 - 您不能排除列。无论您是否需要/想要它们,PartitionKey、RowKey、Timestamp 和 ETag 都会[遗憾地]返回!
    【解决方案3】:

    从结果中排除PartitionKey和RowKey的关键是将TableRequestOptions的ProjectSystemProperties设置为false

    所以上面的代码应该这样修改:

    var emps = query.Execute(new TableRequestOptions { ProjectSystemProperties = false });
    

    另一个工作示例:

    var query = new TableQuery<Event>()
        .Where(
            TableQuery.GenerateFilterCondition(
                "PartitionKey", QueryComparisons.Equal, partitionKey))
        .Select(new[] { "Id" });
    
    var results = table.ExecuteQuery(query, 
        new TableRequestOptions { ProjectSystemProperties = false });
    

    然后你会得到这样的响应:

    {"odata.etag":"W/\"datetime'2017-10-27T08%3A05%3A40.6551979Z'\"","Id":"Event-1" },
    {"odata.etag":"W/\"datetime'2017-10-27T09%3A05%3A40.6551979Z'\"","Id":"Event-2" },
    ...
    

    为避免结果中出现 odata.etag,请在 TableRequestOptions 中指定 PayloadFormat 并获得您想要的结果:

    var results = table.ExecuteQuery(query, 
        new TableRequestOptions { 
            ProjectSystemProperties = false, 
            PayloadFormat = TablePayloadFormat.JsonNoMetadata 
    });
    

    结果:

    { "Id":"Event-1" },{ "Id":"Event-2" },...
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2016-07-27
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      相关资源
      最近更新 更多