{"record":{"id":"0d5d6d3dd6309c7f","repo":"microsoft/aspire","slug":"aspireradius069-endpoints-of-resource-name-cannot-be","errorCode":"ASPIRERADIUS069","errorMessage":"Endpoints of '{resource.Name}' cannot be resolved because it is provisioned by a Radius recipe rather than deployed as a container. The recipe owns its Kubernetes Service and its credentials, so no address derived from the Aspire endpoint model describes it. Within a Radius deployment the publisher projects the recipe's own host/port outputs instead. If you are publishing to Kubernetes, Azure Container Apps, or Azure App Service, a consumer there cannot reach '{resource.Name}' through the Radius environment: deploy '{resource.Name}' to the same compute environment as its consumer, or supply the address explicitly with WithEnvironment. Diagnostic: ASPIRERADIUS069.","messagePattern":"Endpoints of '\\{resource\\.Name\\}' cannot be resolved because it is provisioned by a Radius recipe rather than deployed as a container\\. The recipe owns its Kubernetes Service and its credentials, so no address derived from the Aspire endpoint model describes it\\. Within a Radius deployment the publisher projects the recipe's own host/port outputs instead\\. If you are publishing to Kubernetes, Azure Container Apps, or Azure App Service, a consumer there cannot reach '\\{resource\\.Name\\}' through the Radius environment: deploy '\\{resource\\.Name\\}' to the same compute environment as its consumer, or supply the address explicitly with WithEnvironment\\. Diagnostic: ASPIRERADIUS069\\.","errorType":"exception","errorClass":"RadiusBackingResourceProjectionException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Radius/RadiusEnvironmentResource.cs","lineNumber":297,"sourceCode":"    // which describes where the resource lives. They are instead guarded by\n    // ThrowIfTransportSecurityIsNotRecipeBacked, which rejects them only when the endpoint is\n    // TLS-enabled — the one case in which the local endpoint declaration can disagree with what the\n    // recipe actually deploys.\n    private static void ThrowIfBackingResource(IResource resource)\n    {\n        // Child resources (a database on a server, say) are represented by their parent in the\n        // Radius model, so classify against the resource Radius actually emits.\n        if (resource is IResourceWithParent child)\n        {\n            resource = child.Parent;\n        }\n\n        if (!ResourceTypeMapper.IsBackingResource(resource))\n        {\n            return;\n        }\n\n        throw new RadiusBackingResourceProjectionException(\n            resource,\n            $\"Endpoints of '{resource.Name}' cannot be resolved because it is provisioned by a Radius recipe rather \" +\n            $\"than deployed as a container. The recipe owns its Kubernetes Service and its credentials, so no address \" +\n            $\"derived from the Aspire endpoint model describes it. Within a Radius deployment the publisher projects \" +\n            $\"the recipe's own host/port outputs instead. If you are publishing to Kubernetes, Azure Container Apps, \" +\n            $\"or Azure App Service, a consumer there cannot reach '{resource.Name}' through the Radius environment: \" +\n            $\"deploy '{resource.Name}' to the same compute environment as its consumer, or supply the address \" +\n            $\"explicitly with WithEnvironment. Diagnostic: ASPIRERADIUS069.\");\n    }\n\n    // Mirrors the private helpers on IComputeEnvironmentResource so this override reproduces the\n    // default port semantics (only the port *source* differs — Radius uses the Service/container\n    // port instead of the proxy/host port).\n    private static int GetDefaultPort(string scheme, EndpointAnnotation endpoint)\n    {\n        if (string.Equals(scheme, \"http\", StringComparison.OrdinalIgnoreCase))\n        {\n            return 80;","sourceCodeStart":279,"sourceCodeEnd":315,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Radius/RadiusEnvironmentResource.cs#L279-L315","documentation":"Resources provisioned by a Radius recipe do not run as containers; their Kubernetes Service and credentials are owned by the recipe, so no address derived from the Aspire endpoint model describes them. This guard (ASPIRERADIUS069) prevents resolving a host address expression for recipe-provisioned backing resources. Within a Radius deployment the publisher projects the recipe's own host/port outputs instead.","triggerScenarios":"Calling GetHostAddressExpression or GuardedAddress (via endpoint reference resolution, connection strings, or WithReference environment injection) for a resource where ResourceTypeMapper.IsBackingResource returns true — i.e. a recipe-provisioned backing resource — while not in Radius publisher projection context.","commonSituations":"Adding a recipe-provisioned resource (e.g. Redis or Postgres via Radius recipe) and referencing it from a service that will be published to Kubernetes, ACA, or App Service outside the Radius environment; consumers there cannot reach the resource through the Radius environment.","solutions":["Deploy the consuming service to the same Radius/compute environment as the backing resource","Supply the address explicitly with WithEnvironment instead of relying on endpoint resolution","Provision the resource as a container or external resource rather than via a Radius recipe","Move the consumer into the Radius deployment so the publisher can project the recipe's outputs"],"exampleFix":"// before\nvar redis = builder.AddRedis(\"cache\"); // recipe-provisioned in Radius\nvar api = builder.AddProject<Projects.Api>(\"api\").WithReference(redis);\n// after\nvar api = builder.AddProject<Projects.Api>(\"api\")\n    .WithEnvironment(\"ConnectionStrings__cache\", builder.AddParameter(\"cache-connection\"));","handlingStrategy":"validation","validationCode":"if (ResourceTypeMapper.IsBackingResource(resource)) { /* avoid endpoint address resolution; supply address via WithEnvironment */ }","typeGuard":null,"tryCatchPattern":"try { address = GetEndpointAddress(resourceRef); } catch (RadiusBackingResourceProjectionException ex) when (ex.Message.Contains(\"ASPIRERADIUS069\")) { address = configuration[\"Cache__Host\"] ?? throw new InvalidOperationException(\"Provide explicit address for recipe-provisioned resource\"); }","preventionTips":["Only use WithReference/endpoint resolution for container-deployed resources","Deploy consumers to the same Radius environment as recipe-backed resources","Supply explicit addresses with WithEnvironment for cross-environment consumers"],"tags":["radius","recipes","endpoints","publishing"],"backgroundTag":"unsupported-operation","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}