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 管理服务的订阅密钥的方法?
我已经找到了做到这一点的方法。
我实现了以下 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")
);
我希望这对任何面临相同问题的人都很有用。