Skip to content
Tracon

TraconSessionOwnerRequiredException

Namespace Tracon · Assembly Tracon.Abstractions.dll

Thrown when session ownership is on, a session write needs an owner, and no authenticated identity could be resolved to be that owner.

public sealed class TraconSessionOwnerRequiredException : TraconException, ISerializable

objectExceptionTraconExceptionTraconSessionOwnerRequiredException

ISerializable

TraconException.ErrorType, Exception.GetBaseException(), Exception.ToString(), Exception.GetType(), Exception.TargetSite, Exception.Message, Exception.Data, Exception.InnerException, Exception.HelpLink, Exception.Source, Exception.HResult, Exception.StackTrace, object.GetType(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

Fail-closed. With TraconSessionOwnershipOptions.Enabled on and TraconSessionOwnershipOptions.RequireAuthenticatedOwner left at its default, a session is never OPENED without an owner: an ownerless row would be invisible to every owner-filtered listing from that moment on, so the caller would have written a session they can never read back. Rejecting the write is the honest answer; writing the row and hiding it is not.

This is the one place where attribution stops being bookkeeping. IRunAttributionContext promises that its own failure never stops a run — an unresolved user costs a NULL column and nothing else. With ownership on, the SAME value becomes an authorization input, and its absence rejects the write instead. Same service, two contract strengths; the option is what moves between them.

Over HTTP this surfaces as 403, not 500: it is a policy decision the deployment asked for, not a fault. It is also not 401 — the caller may be perfectly well authenticated for the endpoint’s own role policy and still carry no identity the attribution pipeline can name.

Creates a new error.

public TraconSessionOwnerRequiredException()

TraconSessionOwnerRequiredException(string)

Section titled “ TraconSessionOwnerRequiredException(string)”

Creates a new error.

public TraconSessionOwnerRequiredException(string message)

message string

The error message.

TraconSessionOwnerRequiredException(string, Exception)

Section titled “ TraconSessionOwnerRequiredException(string, Exception)”

Creates a new error.

public TraconSessionOwnerRequiredException(string message, Exception innerException)

message string

The error message.

innerException Exception

The underlying error.

The stable value written to TraconException.ErrorType.

public const string SessionOwnerRequiredErrorType = "session_owner_required"

string

Gets the stable error type name written to the run record.

public override string ErrorType { get; }

string

Defaults to the full name of the exception type, so today’s behaviour does not change. A derived type overrides this member when the record has to be machine readable — for example TraconContentFilteredException writes content_filtered. Reports and alert rules can rely on this stable name instead of an assembly name.

The value is written to RunError.Type and carries no secret.

Gets the id of the session that could not be given an owner.

public string? SessionId { get; init; }

string?