# Controllers & Actions

## Feature flags in Controllers

Entire controllers, or individual actions can be annotated with the FeatureGate attribute. If the feature is off, they can't execute

```csharp
[FeatureGate(FeatureFlags.Users)]
[Route("users")]
[Controller]
public class UsersController : Controller
{
    ...
}
```

## Feature usage in Controllers

Stats are collected automatically when a feature is evaluated, but using is different than being available. To mark a controller or controller method to count as active use of a feature (for usage reporting) just add the FeatureUsage attribute

```csharp
[FeatureGate(FeatureFlags.Users)]
[FeatureUsage(FeatureFlags.Users)]
[Route("users")]
[Controller]
public class UsersController : Controller
{
    ...
}
```

{% hint style="warning" %}
The FeatureUsage attribute needs to be declared after the FeatureGate attribute, otherwise, usage will be counted even if the action isn't allowed by the FeatureGate flag, resulting in incorrect reporting
{% endhint %}
