# TraconContentBlockedException

> Tracon documentation. Tracon is a .NET package family that adds a control
> plane on Microsoft Agent Framework, published as NuGet packages that run
> inside your own ASP.NET Core application.
>
> Page: https://tracon.dev/api/tracon.traconcontentblockedexception/
> Summary: TraconContentBlockedException: Thrown when an IContentGuard blocks content.

<div class="api-provenance">Namespace Tracon · Assembly <code>Tracon.Abstractions.dll</code></div>

Thrown when an [IContentGuard](/api/tracon.icontentguard/) blocks content.

```csharp
public sealed class TraconContentBlockedException : TraconException, ISerializable
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a> ← <a href="/api/tracon.traconexception/">TraconException</a> ← <a href="/api/tracon.traconcontentblockedexception/">TraconContentBlockedException</a></dd><dt>Implements</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.runtime.serialization.iserializable">ISerializable</a></dd><dt>Inherited Members</dt><dd><a href="/api/tracon.traconexception/#Tracon_TraconException_ErrorType">TraconException.ErrorType</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.getbaseexception">Exception.GetBaseException()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.tostring">Exception.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.gettype">Exception.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.targetsite">Exception.TargetSite</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.message">Exception.Message</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.data">Exception.Data</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.innerexception">Exception.InnerException</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.helplink">Exception.HelpLink</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.source">Exception.Source</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.hresult">Exception.HResult</a>, <a href="https://learn.microsoft.com/dotnet/api/system.exception.stacktrace">Exception.StackTrace</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a></dd></dl>

## Remarks

This is separate from [TraconContentFilteredException](/api/tracon.traconcontentfilteredexception/) and must
stay separate: that one reports that the *provider* cut the response,
this one reports that Tracon's own policy did not let the content through.
Writing both to the same stable identity would cost the operator the difference
between "the model refused" and "we refused".

Neither the message nor the fields **carry the blocked content**.
The message can reach the client in a `422` body; putting sensitive text
there would spread the problem.

## Constructors

### <a id="Tracon_TraconContentBlockedException__ctor"></a> TraconContentBlockedException\(\)

Creates a new error.

```csharp
public TraconContentBlockedException()
```

### <a id="Tracon_TraconContentBlockedException__ctor_System_String_"></a> TraconContentBlockedException\(string\)

Creates a new error.

```csharp
public TraconContentBlockedException(string message)
```

#### Parameters

`message` [string](https://learn.microsoft.com/dotnet/api/system.string)

The error message. MUST not carry the blocked text.

### <a id="Tracon_TraconContentBlockedException__ctor_System_String_System_Exception_"></a> TraconContentBlockedException\(string, Exception\)

Creates a new error.

```csharp
public TraconContentBlockedException(string message, Exception innerException)
```

#### Parameters

`message` [string](https://learn.microsoft.com/dotnet/api/system.string)

The error message. MUST not carry the blocked text.

`innerException` [Exception](https://learn.microsoft.com/dotnet/api/system.exception)

The underlying error.

## Fields

### <a id="Tracon_TraconContentBlockedException_ContentBlockedErrorType"></a> ContentBlockedErrorType

The stable value written to [TraconException.ErrorType](/api/tracon.traconexception/#Tracon_TraconException_ErrorType).

```csharp
public const string ContentBlockedErrorType = "content_blocked"
```

#### Field Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)

## Properties

### <a id="Tracon_TraconContentBlockedException_Direction"></a> Direction

Gets the direction that was inspected.

```csharp
public ContentGuardDirection Direction { get; init; }
```

#### Property Value

 [ContentGuardDirection](/api/tracon.contentguarddirection/)

### <a id="Tracon_TraconContentBlockedException_ErrorType"></a> ErrorType

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

```csharp
public override string ErrorType { get; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)

#### Remarks

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](/api/tracon.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**.

### <a id="Tracon_TraconContentBlockedException_GuardName"></a> GuardName

Gets the name of the guard that made the decision.

```csharp
public string? GuardName { get; init; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)?

### <a id="Tracon_TraconContentBlockedException_RuleName"></a> RuleName

Gets the matched rule name, or [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) when the guard reports none.

```csharp
public string? RuleName { get; init; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)?
