.Contains 在 Azure api 管理中的奇怪行为

Strange behavior of .Contains in Azure api management

我在 Azure API 管理中遇到了这种奇怪的行为,我正在寻找解决方法。

<set-variable name="isIOS" value="@(context.Request.Headers["User-Agent"].Contains("iOS"))" />

始终为 false,除非存在完全匹配且 User-Agent 值恰好为“iOS”。

如果它包含完整的字符串(在我的例子中)“iOS Agent - xxxxx/1.2.4 (com.xxxxx.yyyyy.zz; build:108; iOS 14.3 .0) Alamofire/4.9.1" isIOS 设置为“false”。

有人可以确认此行为 and/or 知道解决方法吗?

context.Request.Headers 在 Azure API 中的管理策略是一个简单的 IReadOnlyDictionary<string, string[]>

看这里:https://docs.microsoft.com/en-us/azure/api-management/api-management-policy-expressions#ref-context-request

在您的情况下,您可以像这样获得 isIOS 变量:

<set-variable name="isIOS" value="@(context.Request.Headers.GetValueOrDefault("User-Agent","").Contains("iOS"))" />

这种方法也是微软推荐的,可以防止抛出像KeyNotFoundException

这样的异常