我正在尝试从Azure移动应用程序获取项目总数。移动应用程序是使用表存储的.Net实现。 它基于Mobile App QuickStart代码,并且只进行了与Table Storage一起使用所需的最少更改。所有的NuGet软件包都已更新为最新版本。
这是客户端代码(Xamarin-Android):
client = new MobileServiceClient(applicationURL, new LoggingHandler(true));
todoTable = client.GetTable<ToDoItem>();
List<ToDoItem> list = await todoTable.Take(0).IncludeTotalCount().ToListAsync();
这给了我答案
在URI中指定的查询无效:不允许使用“查询选项'InlineCount'”。要允许它,请在EnableQueryAttribute或QueryValidationSettings上设置“ AllowedQueryOptions”属性。
我尝试过的事情
[EnableQuery(AllowedQueryOptions= AllowedQueryOptions.All]
public Task<IEnumerable<TodoItem>> GetAllTodoItems(ODataQueryOptions options)
{
return DomainManager.QueryAsync(options);
}
这仍然给我同样的错误。我尝试了AllowedQueryOptions的不同组合,例如 [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.Filter | AllowedQueryOptions.Top | AllowedQueryOptions.Select | AllowedQueryOptions.InlineCount)] 但结果总是一样。
然后我尝试在ConfigureMobileApp()中添加选项
config.Filters.Add(new EnableQueryAttribute()
{
AllowedQueryOptions = AllowedQueryOptions.All
});
代码编译和发布似乎成功,但是发布显示的代码后显示的网站
<?xml version="1.0" encoding="ISO-8859-1"?>
<Error>
<Message>An error has occurred.</Message>
</Error>
客户端仍返回相同的错误消息。 我还尝试将其与[EnableQuery]结合使用,但还是没有运气。
使用代码初始化DomainManager
DomainManager = new StorageDomainManager<TodoItem>(connectionStringName, tableName, Request);
我试图将其修改为使用带有ValidationSettings和ODataQuerySettings对象的构造函数。
DomainManager = new StorageDomainManager<TodoItem>(connectionStringName, tableName, Request, GetValidationSettings(), GetQuerySettings());
我对GetValidationSettings的实现与上的GetDefaultValidationSettings相同 https://github.com/Azure/azure-mobile-apps-net-server/blob/master/src/Microsoft.Azure.Mobile.Server.Storage/StorageDomainManager.cs
除了我将内联计数添加到AllowedQueryOptions
AllowedQueryOptions = AllowedQueryOptions.Filter
| AllowedQueryOptions.Top
| AllowedQueryOptions.Select
| AllowedQueryOptions.InlineCount,
我再也没有收到相同的错误,因为这使QueryAsync失败,而出现内部服务器错误。
任何人都知道如何配置AllowedQueryOptions,以便可以从客户端使用IncludeTotalCount()吗?