{"record":{"id":"70b1f2667082e794","repo":"dotnet/yarp","slug":"nameof-key-cannot-be-null-or-empty-70b1f2","errorCode":null,"errorMessage":"'{nameof(key)}' cannot be null or empty.","messagePattern":"'(.+?)' cannot be null or empty\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/ReverseProxy/Transforms/QueryParameterFromStaticTransform.cs","lineNumber":15,"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;\n\nnamespace Yarp.ReverseProxy.Transforms;\n\npublic class QueryParameterFromStaticTransform : QueryParameterTransform\n{\n    public QueryParameterFromStaticTransform(QueryStringTransformMode mode, string key, string value)\n        : base(mode, key)\n    {\n        if (string.IsNullOrEmpty(key))\n        {\n            throw new ArgumentException($\"'{nameof(key)}' cannot be null or empty.\", nameof(key));\n        }\n\n        ArgumentNullException.ThrowIfNull(value);\n\n        Value = value;\n    }\n\n    internal string Value { get; }\n\n    /// <inheritdoc/>\n    protected override string GetValue(RequestTransformContext context)\n    {\n        return Value;\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":31,"githubUrl":"https://github.com/dotnet/yarp/blob/bd11867bee7df522e7fd3effb08a9c85fd616908/src/ReverseProxy/Transforms/QueryParameterFromStaticTransform.cs#L1-L31","documentation":"Thrown by the QueryParameterFromStaticTransform constructor when `key` is null or empty. The transform adds a static value under `key`; a blank query-parameter name is invalid, so it is rejected as ArgumentException before the base class is reached.","triggerScenarios":"Constructing `new QueryParameterFromStaticTransform(mode, key, value)` with `key` null/empty, or transform config that omits the query key while supplying a value.","commonSituations":"Config sets a static query transform with a value but no key. Programmatic construction from input that yielded an empty key.","solutions":["Provide a non-empty query-parameter name for `key`.","Guard the value before constructing if it comes from input.","Complete the transform config with both key and value."],"exampleFix":"// before\nnew QueryParameterFromStaticTransform(QueryStringTransformMode.Set, \"\", \"v1\");\n// after\nnew QueryParameterFromStaticTransform(QueryStringTransformMode.Set, \"ver\", \"v1\");","handlingStrategy":"validation","validationCode":"ArgumentException.ThrowIfNullOrEmpty(key);\nArgumentNullException.ThrowIfNull(value);","typeGuard":"static bool IsValidQueryKey(string? key) => !string.IsNullOrEmpty(key);","tryCatchPattern":null,"preventionTips":["Require both key and value in static query-transform config.","Use ArgumentException.ThrowIfNullOrEmpty before constructing.","Validate config completeness at startup."],"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"}