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 本地主机配置 CORS

Azure Functions 中的 HttpClient 最佳实践

Azure Functions with java - 如何获取写入函数的日志?

Azure Functions 如何获取新的 local.settings.json?

在 Azure Functions 中处理通用 404 响应

如何在 Azure Functions C# 上以简单的方式获取 GET 查询参数?