Skip to content

[BUG] Empty query params are discarded #894

@nathanhi

Description

@nathanhi

Investigative information

  • Timestamp: 1632902318
  • Function App name:
  • Function name(s) (as appropriate):
  • Core Tools version: 3.2.0-0 Commit hash: 5ffe001695be89a9b33cb569c875aef15938830b

Repro steps

Provide the steps required to reproduce the problem:
  1. Create simple function:
    __init__.py
    import azure.functions
    
    def main(req: azure.functions.HttpRequest):
        return str(req.params)
    function.json
    {
        "scriptFile": "__init__.py",
        "bindings": [
            {
                "authLevel": "anonymous",
                "type": "httpTrigger",
                "direction": "in",
                "name": "req",
                "methods": [
                    "get",
                    "post"
                ]
            },
            {
                "type": "http",
                "direction": "out",
                "name": "$return"
            }
        ]
    }
  2. Access function URL with query params ?paramwithvalue=foo&paramwithoutvalue
  3. {"paramwithvalue": "foo"} is returned

Expected behavior

I would expect the HttpRequest.params to contain all query params, defaulting to either a value of None or an empty string:

{
    "paramwithvalue": "foo",
    "paramwithoutvalue": ""
}

Actual behavior

The query parameter is silently discarded:

{
    "paramwithvalue": "foo"
}

Known workarounds

The query param can be retrieved via urllib.parse.parse_qs from the HttpRequest.urlobject:

__init__.py

from urllib.parse import parse_qs, urlparse

import azure.functions

def main(req: azure.functions.HttpRequest):
    return str(parse_qs(urlparse(req.url).query, keep_blank_values=True))

This will return the full set of params:

"{'paramwithvalue': ['foo'], 'paramwithoutvalue': ['']}"

Contents of the requirements.txt file:

azure-functions==1.7.2

Related information

This seems to be an underlying issue in the protobuf implementation and was already fixed in Azure/azure-functions-language-worker-protobuf#49

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions