Azure 移动服务同步上下文:添加自定义参数

本文关键字:添加 自定义 参数 上下文 移动 服务 同步 Azure | 更新日期: 2023-09-27 18:32:54

我正在使用Azure Mobile Services向Windows Universal应用程序提供数据,并使用Azure API Management作为API使用和分析目的的代理。这工作得很好。

现在,我被要求为应用程序提供脱机功能,因此我开始使用 Azure 移动服务同步上下文,以便使用 SQLite 作为本地存储来实现此功能。

Azure API 管理要求我将订阅密钥作为查询字符串的一部分发送。我一直在使用IMobileServiceTable.InsertAsync方法提供的"参数"字典来执行此操作,这也工作正常。

现在,离线实现要求我改用 IMobileServiceSyncTable.InsertAsync 方法,它不会提供"参数"字典的重载。MobileServiceSyncContextExtensions.PushAsync 方法似乎也没有提供向查询字符串添加自定义参数的方法。

有谁知道在使用移动服务同步上下文时包含自定义参数以发送 Azure API 管理服务的订阅密钥的方法?

Azure 移动服务同步上下文:添加自定义参数

我已经找到了做到这一点的方法。

我实现了以下 HTTP 消息处理程序:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
class AzureApiManagementHandler : DelegatingHandler
{
    string _subscriptionKey;
    public AzureApiManagementHandler(string subscriptionKey)
    {
        _subscriptionKey = subscriptionKey;
    }
    protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        var baseUri = new UriBuilder(request.RequestUri);
        string queryToAppend = string.Format("subscription-key={0}", _subscriptionKey);
        if (baseUri.Query != null && baseUri.Query.Length > 1)
            baseUri.Query = baseUri.Query.Substring(1) + "&" + queryToAppend;
        else
            baseUri.Query = queryToAppend;
        request.RequestUri = baseUri.Uri;
        return base.SendAsync(request, cancellationToken);
    }
}

然后我把它传递给构造函数中的移动服务客户端:

    public static MobileServiceClient MobileService = new MobileServiceClient(
         "https://yoursubdomainhere.azure-api.net",
         "yourapikeyhere",
         new AzureApiManagementHandler("yoursubscriptionkeyhere")
    );

我希望这对任何面临相同问题的人都很有用。