【问题标题】:Azure Functions: Get full request URL including query string in a HTTP Trigger functionAzure Functions:获取完整的请求 URL,包括 HTTP 触发器函数中的查询字符串
【发布时间】: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。由于查询字符串没有官方格式,只有约定,因此能够处理所有类型的查询会很好字符串以防万一。

【问题讨论】:

    标签: azure query-string azure-functions


    【解决方案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 中的行为。打开要修复的问题并将在此处分享
    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多