{"record":{"id":"069e06b6daa75549","repo":"MassTransit/MassTransit","slug":"an-activity-name-is-required","errorCode":null,"errorMessage":"An Activity Name is required","messagePattern":"An Activity Name is required","errorType":"exception","errorClass":"SerializationException","httpStatus":null,"severity":"error","filePath":"src/MassTransit.Abstractions/Courier/Courier/Messages/RoutingSlipActivity.cs","lineNumber":31,"sourceCode":"    {\n    #pragma warning disable CS8618\n        public RoutingSlipActivity()\n    #pragma warning restore CS8618\n        {\n        }\n\n        public RoutingSlipActivity(string name, Uri address, IDictionary<string, object> arguments)\n        {\n            Name = name;\n            Address = address;\n            Arguments = arguments;\n        }\n\n        [SuppressMessage(\"ReSharper\", \"ConstantNullCoalescingCondition\")]\n        public RoutingSlipActivity(Activity activity)\n        {\n            if (string.IsNullOrEmpty(activity.Name))\n                throw new SerializationException(\"An Activity Name is required\");\n            if (activity.Address == null)\n                throw new SerializationException(\"An Activity ExecuteAddress is required\");\n\n            Name = activity.Name;\n            Address = activity.Address;\n            Arguments = activity.Arguments ?? new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);\n        }\n\n        public string Name { get; set; }\n        public Uri Address { get; set; }\n        public IDictionary<string, object> Arguments { get; set; }\n    }\n}\n","sourceCodeStart":13,"sourceCodeEnd":45,"githubUrl":"https://github.com/MassTransit/MassTransit/blob/62ab339afa3bac2e9b3fe1769d0d35d7e44778e9/src/MassTransit.Abstractions/Courier/Courier/Messages/RoutingSlipActivity.cs#L13-L45","documentation":"When deserializing a RoutingSlip, RoutingSlipActivity's constructor validates the source Activity. If Activity.Name is null or empty it throws SerializationException — a routing slip activity without a name cannot be routed or tracked, so the message is treated as corrupt.","triggerScenarios":"Deserializing a routing slip message whose activities array contains an entry with a missing/empty Name — usually from a hand-built routing slip, a serialized form produced by another version, or manual JSON editing.","commonSituations":"Building routing slips with an activity whose Name was never set; schema drift between MassTransit versions or between producer/consumer; corrupted or hand-edited routing slip payloads on the wire.","solutions":["Fix the producer so every Activity added to the routing slip has a non-empty Name (AddActivity/Execute with a named activity)","Reject/quarantine malformed routing slip messages and log the message id for diagnosis","Validate routing slip payloads after deserialization from external/untrusted sources"],"exampleFix":"// before\nvar activity = new Activity(); // Name not set\nroutingSlipBuilder.AddActivity(activity);\n// after\nvar activity = new Activity(\"ProcessOrder\")\n{\n    Address = new Uri(\"queue:process-order\")\n};\nroutingSlipBuilder.AddActivity(activity);","handlingStrategy":"try-catch","validationCode":"if (string.IsNullOrEmpty(activity?.Name))\n    throw new InvalidOperationException(\"Routing slip activity requires a Name before use\");","typeGuard":"bool IsValidActivity(Activity? a) => a != null && !string.IsNullOrEmpty(a.Name) && a.Address != null;","tryCatchPattern":"try { var ra = new RoutingSlipActivity(activity); }\ncatch (SerializationException ex) { logger.LogError(ex, \"Malformed routing slip activity: {Message}\", ex.Message); return; }","preventionTips":["Always create activities via builders/factories that set Name and Address","Validate routing slips after deserializing from untrusted sources","Pin MassTransit versions across producers/consumers to avoid schema drift"],"tags":["courier","routing-slip","serialization","masstransit"],"backgroundTag":"schema-validation-failed","analyzedSha":"62ab339afa3bac2e9b3fe1769d0d35d7e44778e9","analyzedAt":"2026-09-13T22:47:47.593Z","contentChangedAt":"2026-09-13T22:47:47.593Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}