Azure Functions:获取完整的请求 URL,包括 HTTP 触发器函数中的查询字符串
Posted
技术标签:
【中文标题】Azure Functions:获取完整的请求 URL,包括 HTTP 触发器函数中的查询字符串【英文标题】:Azure Functions: Get full request URL including query string in a HTTP Trigger function 【发布时间】:2018-05-25 02:42:12 【问题描述】:有没有办法在 Azure Functions HTTP Trigger javascript 函数中获取完整的请求 URL,包括查询字符串部分?
req(和 context.req)参数确实包括在 req.url 中没有查询字符串的 url,以及在 req.query 中作为键值对的查询字符串。但据我所知,无法直接访问完整的请求 url。仅使用基本 url 和键值对象来重构完整的 URL 也是不可能的。
例如像http://foo.azurewebsites.net/api/bar/baz?a=1&&&b=2&c=&d===5&e=&f=6&g这样的东西
变成了
url: '/bar/baz/',
query:
a: '1',
b: '2',
c: '\n\u0001d\u0012\u0003==5',
e: '\n\u0001f\u0012\u00016',
g: '\n\u0001a\u0012\u0003\n\u00011'
构建代理、URL 缩短器等需要访问完整的请求 URL。由于查询字符串没有官方格式,只有约定,因此能够处理所有类型的查询会很好字符串以防万一。
【问题讨论】:
【参考方案1】:基于docs,应该可以从req.originalUrl
获取:
module.exports = function (context, req)
context.log('HTTP trigger function processed a request: ' + req.originalUrl);
context.done();
;
来自 cmets 的更新:显然,这不适用于 2.0 运行时,但最终将得到支持:issue。
【讨论】:
谢谢米哈伊尔!不幸的是 req.originalUrl 不包含查询字符串,只包含基本 url(与 req.url 相同)。 确实如此,我运行了我的函数并在日志中得到了https://myapp.azurewebsites.net/api/HttpTriggerJS1?code=mycode&test=test2
有趣。您使用的是什么版本的运行时?这可能是 2.x 运行时或 macOS CLI 环境的问题。刚刚创建了一个新的应用程序和函数来测试,查询字符串肯定不包含在 req.originalUrl 中。谢谢你把我引向正确的方向!
您可能正在使用 Functions 2.0。看到您的回复后,我进行了检查,看起来原始 URL 的格式不正确。 @Mikhail 的答案是正确的(1.0 中的当前行为)并且也将是 2.0 中的行为。打开要修复的问题并将在此处分享
打开此跟踪:github.com/Azure/azure-webjobs-sdk-script/issues/2212以上是关于Azure Functions:获取完整的请求 URL,包括 HTTP 触发器函数中的查询字符串的主要内容,如果未能解决你的问题,请参考以下文章
Azure Functions 中的 HttpClient 最佳实践
Azure Functions with java - 如何获取写入函数的日志?
Azure Functions 如何获取新的 local.settings.json?