{"record":{"id":"a267bbf0e4fe317d","repo":"SignalR/SignalR","slug":"descriptor","errorCode":null,"errorMessage":"descriptor","messagePattern":"descriptor","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.AspNet.SignalR.Core/Hubs/Lookup/DefaultParameterResolver.cs","lineNumber":23,"sourceCode":"using System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.AspNet.SignalR.Json;\n\nnamespace Microsoft.AspNet.SignalR.Hubs\n{\n    public class DefaultParameterResolver : IParameterResolver\n    {\n        /// <summary>\n        /// Resolves a parameter value based on the provided object.\n        /// </summary>\n        /// <param name=\"descriptor\">Parameter descriptor.</param>\n        /// <param name=\"value\">Value to resolve the parameter value from.</param>\n        /// <returns>The parameter value.</returns>\n        public virtual object ResolveParameter(ParameterDescriptor descriptor, IJsonValue value)\n        {\n            if (descriptor == null)\n            {\n                throw new ArgumentNullException(\"descriptor\");\n            }\n\n            if (value == null)\n            {\n                throw new ArgumentNullException(\"value\");\n            }\n\n            if (value.GetType() == descriptor.ParameterType)\n            {\n                return value;\n            }\n\n            return value.ConvertTo(descriptor.ParameterType);\n        }\n\n        /// <summary>\n        /// Resolves method parameter values based on provided objects.\n        /// </summary>","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/SignalR/SignalR/blob/693053b89a9e1f5ce819e3233ed159a6409de22b/src/Microsoft.AspNet.SignalR.Core/Hubs/Lookup/DefaultParameterResolver.cs#L5-L41","documentation":"Thrown by DefaultParameterResolver.ResolveParameter when the ParameterDescriptor argument is null. This is an internal guard within the hub method invocation pipeline. The framework always supplies valid descriptors during normal operation, so this only fires from custom IParameterResolver implementations or direct API calls.","triggerScenarios":"Calling ResolveParameter(null, value) directly, or a custom IParameterResolver implementation that passes null for the descriptor during parameter resolution.","commonSituations":"Writing a custom parameter resolver that does not properly look up the ParameterDescriptor; unit tests that exercise the resolver directly.","solutions":["Ensure a valid ParameterDescriptor is resolved before calling ResolveParameter","If implementing a custom IParameterResolver, guard against null descriptors in your lookup logic","In tests, construct a valid ParameterDescriptor before calling the method"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (descriptor == null)\n    throw new ArgumentNullException(nameof(descriptor));\nresolver.ResolveParameter(descriptor, value);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always verify ParameterDescriptor is non-null before calling ResolveParameter","In custom IParameterResolver implementations, guard all descriptor lookups against null","Avoid calling the internal parameter resolution API directly from application code"],"tags":["signalr","hubs","argument-null","parameter-resolution","internal"],"backgroundTag":null,"analyzedSha":"693053b89a9e1f5ce819e3233ed159a6409de22b","analyzedAt":"2026-08-13T22:23:59.793Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}