{"record":{"id":"355fead469272056","repo":"dotnet/yarp","slug":"key-cannot-be-null-or-empty","errorCode":null,"errorMessage":"'key' cannot be null or empty.","messagePattern":"'key' cannot be null or empty\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/ReverseProxy/Transforms/QueryParameterRemoveTransform.cs","lineNumber":18,"sourceCode":"// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Yarp.ReverseProxy.Transforms;\n\n/// <summary>\n/// A request transform that removes the given query parameter.\n/// </summary>\npublic class QueryParameterRemoveTransform : RequestTransform\n{\n    public QueryParameterRemoveTransform(string key)\n    {\n        if (string.IsNullOrEmpty(key))\n        {\n            throw new ArgumentException($\"'{nameof(key)}' cannot be null or empty.\", nameof(key));\n        }\n\n        Key = key;\n    }\n\n    internal string Key { get; }\n\n    /// <inheritdoc/>\n    public override ValueTask ApplyAsync(RequestTransformContext context)\n    {\n        ArgumentNullException.ThrowIfNull(context);\n\n        context.Query.Collection.Remove(Key);\n\n        return default;\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":36,"githubUrl":"https://github.com/dotnet/yarp/blob/bd11867bee7df522e7fd3effb08a9c85fd616908/src/ReverseProxy/Transforms/QueryParameterRemoveTransform.cs#L1-L36","documentation":"Thrown by the QueryParameterRemoveTransform constructor when `key` is null or empty. The transform removes a named query parameter; without a name there is nothing to remove, so it is rejected as ArgumentException on `key`.","triggerScenarios":"Constructing `new QueryParameterRemoveTransform(key)` with `key` null/empty/whitespace, or via transform config that omits the query parameter name to remove.","commonSituations":"Config sets a query-remove transform with no key. Programmatic construction from input that yielded an empty key.","solutions":["Provide a non-empty query-parameter name to remove.","Validate the key before constructing if sourced from input.","Fix the transform config to include the key."],"exampleFix":"// before\nnew QueryParameterRemoveTransform(\"\");\n// after\nnew QueryParameterRemoveTransform(\"tracking\");","handlingStrategy":"validation","validationCode":"ArgumentException.ThrowIfNullOrEmpty(key);","typeGuard":"static bool IsValidQueryKey(string? key) => !string.IsNullOrEmpty(key);","tryCatchPattern":null,"preventionTips":["Always specify the query parameter name to remove.","Validate config keys for query-remove transforms.","Use ArgumentException.ThrowIfNullOrEmpty before constructing."],"tags":["transforms","query-string","argument-validation","yarp"],"backgroundTag":null,"analyzedSha":"bd11867bee7df522e7fd3effb08a9c85fd616908","analyzedAt":"2026-08-13T21:29:49.359Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}