Skip to main content

.NET Backend SDK

The Hyppot .NET Backend SDK enables server-side feature experimentation in your .NET applications. This approach is ideal for backend logic, API behavior changes, and ensuring consistent cross-client experiences.

Important: Backend integration requires NuGet package installation in your .NET application. If you're using Docker deployment, you can only integrate via the frontend JavaScript SDK. We are planning to make it available soon.

Prerequisites

  • .NET 8.0 or later
  • Hyppot installed via NuGet packages
  • ASP.NET Core application with Hyppot configured

Basic Usage

Dependency Injection

Hyppot services are automatically registered when you call AddHyppot():

// Services are available through DI
public class MyController : ControllerBase
{
private readonly IExperimentationResolver _resolver;
private readonly IExperimentTracker _tracker;

public MyController(
IExperimentationResolver resolver,
IExperimentTracker tracker)
{
_resolver = resolver;
_tracker = tracker;
}
}

Resolving Experiments

Use IExperimentationResolver to get experiment variants for users:

// Resolve a specific experiment for a user
var experiment = _resolver.ResolveForUser(
new ExperimentId("button-color-test"),
new UserId("user-123"));

if (experiment != null)
{
// Get variable values
var buttonColor = experiment.Variables
.First(v => v.Name == new VariableName("button-color"))
.Value.Get<string>();

// Use the values in your logic
return new FeatureResponse
{
ButtonColor = buttonColor,
};
}

Resolve All Experiments

Get all experiments assigned to a user:

var userExperiments = _resolver.ResolveAll(new UserId("user-123"));

foreach (var experiment in userExperiments)
{
// Process each experiment
var experimentId = experiment.ExperimentId;
var variantId = experiment.VariantId;

// Apply experiment logic
}

Tracking Events

Impression Tracking

Track when users are exposed to experiment variants:

// Track impression when user sees the experiment
await _tracker.TrackImpressionAsync(
ExperimentImpression.Create(
new ExperimentId("button-color-test"),
new VariantId("red-variant"),
new UserId("user-123"),
DateTime.UtcNow
));

// Track impression with deduplication key
await _tracker.TrackImpressionAsync(
ExperimentImpression.Create(
new ExperimentId("button-color-test"),
new VariantId("red-variant"),
new UserId("user-123"),
DateTime.UtcNow,
deduplicationKey: "page-view-123"
));

Conversion Tracking

Track user actions as conversions:

// Track simple conversion
await _tracker.TrackConversionAsync(
ExperimentConversion.Create(
"button-click",
DateTime.UtcNow,
new UserId("user-123")
));

// Track conversion with metrics
var metrics = new VariableInstance[]
{
new VariableInstance(
new VariableName("revenue"),
new VariableValue<double>(125.50)
),
new VariableInstance(
new VariableName("product-category"),
new VariableValue<string>("electronics")
),
new VariableInstance(
new VariableName("is-premium"),
new VariableValue<bool>(true)
)
};

await _tracker.TrackConversionAsync(
ExperimentConversion.Create(
"purchase-completed",
DateTime.UtcNow,
new UserId("user-123"),
deduplicationKey: "order-456",
metrics: metrics
));

Best Practices

  1. Always provide fallbacks - Never let experiments break your application
  2. Use dependency injection - Leverage ASP.NET Core's built-in DI
  3. Track impressions early - Track when users are exposed to experiments
  4. Validate experiment data - Don't trust experiment variables blindly
  5. Use async methods - Leverage async patterns for better performance
  6. Handle errors gracefully - Log errors but don't fail the user experience

Next Steps