{"record":{"id":"3b9d2bc050d15455","repo":"dotnet/yarp","slug":"the-transform-contains-more-parameters-than-expect","errorCode":null,"errorMessage":"The transform contains more parameters than expected: {string.Join(';', rawTransform.Keys)}","messagePattern":"The transform contains more parameters than expected: (.+?)","errorType":"validation","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/ReverseProxy/Transforms/Builder/TransformHelpers.cs","lineNumber":23,"sourceCode":"using System.Collections.Generic;\n\nnamespace Yarp.ReverseProxy.Transforms.Builder;\n\npublic static class TransformHelpers\n{\n    public static void TryCheckTooManyParameters(TransformRouteValidationContext context, IReadOnlyDictionary<string, string> rawTransform, int expected)\n    {\n        if (rawTransform.Count > expected)\n        {\n            context.Errors.Add(new InvalidOperationException(\"The transform contains more parameters than expected: \" + string.Join(';', rawTransform.Keys)));\n        }\n    }\n\n    public static void CheckTooManyParameters(IReadOnlyDictionary<string, string> rawTransform, int expected)\n    {\n        if (rawTransform.Count > expected)\n        {\n            throw new InvalidOperationException(\"The transform contains more parameters than expected: \" + string.Join(';', rawTransform.Keys));\n        }\n    }\n\n    internal static void RemoveAllXForwardedHeaders(TransformBuilderContext context, string prefix)\n    {\n        context.AddXForwardedFor(prefix + ForwardedTransformFactory.ForKey, ForwardedTransformActions.Remove);\n        context.AddXForwardedPrefix(prefix + ForwardedTransformFactory.PrefixKey, ForwardedTransformActions.Remove);\n        context.AddXForwardedHost(prefix + ForwardedTransformFactory.HostKey, ForwardedTransformActions.Remove);\n        context.AddXForwardedProto(prefix + ForwardedTransformFactory.ProtoKey, ForwardedTransformActions.Remove);\n    }\n\n    internal static void RemoveForwardedHeader(TransformBuilderContext context)\n    {\n        context.RequestTransforms.Add(RequestHeaderForwardedTransform.RemoveTransform);\n    }\n}\n","sourceCodeStart":5,"sourceCodeEnd":40,"githubUrl":"https://github.com/dotnet/yarp/blob/bd11867bee7df522e7fd3effb08a9c85fd616908/src/ReverseProxy/Transforms/Builder/TransformHelpers.cs#L5-L40","documentation":"Thrown (or recorded) by TransformHelpers.CheckTooManyParameters / TryCheckTooManyParameters when a raw transform dictionary has more keys than the transform expects. Excess keys usually mean a typo'd extra field, a stray comma, or a misunderstanding of which keys belong to a transform. The check version throws InvalidOperationException; the Try version appends to context.Errors for validation.","triggerScenarios":"A transform entry includes an unexpected extra key alongside the recognized ones, e.g. `PathRemovePrefix` with an additional `Set` key, or two transform types accidentally merged into one object.","commonSituations":"Merging transform config by hand and leaving a key from a sibling transform. Typo creating a phantom key. Old config retained a removed parameter after a YARP upgrade.","solutions":["Compare the keys in the error to the transform's documented parameter set and remove the extra key.","Split a multi-purpose transform object into separate transform entries.","Run route config validation (TryCheckTooManyParameters path) during startup to surface these as config errors instead of runtime exceptions."],"exampleFix":"// before\n{ \"PathRemovePrefix\": \"/api\", \"Set\": \"/new\" }\n// after\n{ \"PathRemovePrefix\": \"/api\" }","handlingStrategy":"validation","validationCode":"TransformHelpers.CheckTooManyParameters(rawTransform, expected);\n// or for validation context:\nTransformHelpers.TryCheckTooManyParameters(context, rawTransform, expected);","typeGuard":"static bool HasExpectedKeys(IReadOnlyDictionary<string,string> raw, int expected) =>\n    raw.Count <= expected;","tryCatchPattern":null,"preventionTips":["Keep each transform entry to a single transform type's keys.","Run TryCheckTooManyParameters during route validation to surface errors at startup.","Review diffs of transform config carefully for stray keys."],"tags":["transforms","config","validation","yarp"],"backgroundTag":null,"analyzedSha":"bd11867bee7df522e7fd3effb08a9c85fd616908","analyzedAt":"2026-08-13T21:29:49.359Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}