如何在Azure移动应用上配置AllowedQueryOptions?

时间:2018-11-26 11:33:59

标签: azure xamarin.android azure-storage azure-mobile-services

我正在尝试从Azure移动应用程序获取项目总数。移动应用程序是使用表存储的.Net实现。 它基于Mobile App QuickStart代码,并且只进行了与Table Storage一起使用所需的最少更改。所有的Nu​​Get软件包都已更新为最新版本。

这是客户端代码(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()吗?

0 个答案:

没有答案