如何在Kusto http_request中传递查询参数?含GPS场景示例
Kusto http_request:动态URI使用与查询参数传递方案
问题概述
- 如何在Kusto的
http_request中传递查询参数(如示例中的wp.1参数) - 编写GPS坐标相关的Kusto函数时,是否允许使用动态URI,还是必须使用静态URI?
- 有哪些可行的解决方案?
原始代码示例
let GpsLat = '47.2429490282'; let GpsLong = '9.3393486426'; let uri = @'http://dev.virtualearth.net/REST/V1/Routes?wp.0=45.980537,7.641618&wp.1={GpsLat},{GpsLong}&key=THE_KEY'; evaluate http_request(uri)
核心问题解答:动态URI是允许的
Kusto完全支持使用动态URI,不需要局限于静态URI。但注意:原始示例中的@'...'是逐字字符串,不会解析其中的{GpsLat}变量,需要用正确的字符串拼接或插值语法实现动态替换。
可行解决方案与代码示例
1. 字符串拼接/插值构建动态URI(基础方式)
使用strcat()函数或双引号字符串插值(Kusto支持双引号字符串内的变量替换)来构建URI,同时注意对参数进行URL编码(避免特殊字符导致请求失败)。
修正后的写法
let GpsLat = '47.2429490282'; let GpsLong = '9.3393486426'; // 用strcat拼接并编码参数,避免特殊字符问题 let uri = strcat( 'http://dev.virtualearth.net/REST/V1/Routes?wp.0=45.980537,7.641618&wp.1=', url_encode(strcat(GpsLat, ',', GpsLong)), '&key=THE_KEY' ); evaluate http_request(uri)
2. 使用http_request的query_parameters参数(推荐)
http_request支持第二个dynamic类型参数传递查询参数,Kusto会自动处理URL编码,代码更清晰且安全。
let GpsLat = '47.2429490282'; let GpsLong = '9.3393486426'; let base_uri = 'http://dev.virtualearth.net/REST/V1/Routes'; let query_params = dynamic({ "wp.0": "45.980537,7.641618", "wp.1": strcat(GpsLat, ",", GpsLong), "key": "THE_KEY" }); evaluate http_request(base_uri, query_params)
3. 封装为可重用Kusto函数
将逻辑封装成函数,方便重复调用,输入GPS坐标即可获取结果:
.create-or-alter function GetRouteFromGps(GpsLat:string, GpsLong:string) { let base_uri = 'http://dev.virtualearth.net/REST/V1/Routes'; let query_params = dynamic({ "wp.0": "45.980537,7.641618", "wp.1": strcat(GpsLat, ",", GpsLong), "key": "THE_KEY" }); evaluate http_request(base_uri, query_params) } // 调用示例 GetRouteFromGps('47.2429490282', '9.3393486426')
注意事项
- URL编码:如果参数包含特殊字符(如空格、&、=),必须使用
url_encode()函数处理,或使用query_parameters参数让Kusto自动处理。 - 权限限制:确保Kusto集群允许访问目标API(需在集群的出站规则中配置允许的域名)。
- 密钥安全:避免在代码中硬编码API密钥,建议使用Kusto的机密存储,通过
secret()函数调用。
内容的提问来源于stack exchange,提问作者Alessio
相关产品推荐
相关产品推荐

