ASP.NET Core and dependency injection¶
The SDK integrates with the normal .NET typed HttpClient pattern.
builder.Services.AddOkatanaClient(new OkatanaClientOptions
{
BaseUrl = builder.Configuration["Okatana:Url"]
?? throw new InvalidOperationException("Okatana:Url is required."),
ApiKey = builder.Configuration["Okatana:ApiKey"]
?? throw new InvalidOperationException("Okatana:ApiKey is required."),
Timeout = TimeSpan.FromSeconds(30)
});
Inject OkatanaClient into an application service:
public sealed class ReleaseService(OkatanaClient okatana)
{
public async Task MarkDeployedAsync(string ticketId, string boardId,
CancellationToken cancellationToken)
{
await okatana.Tickets.MoveAsync(ticketId,
new MoveTicketRequest { BoardId = boardId },
cancellationToken: cancellationToken);
}
}
You can continue configuring the returned IHttpClientBuilder with standard .NET handlers. Avoid adding a generic retry handler that retries all methods, because Okatana writes are not idempotent by contract. If you add resilience middleware, configure it so POST, PATCH, PUT, and DELETE do not gain implicit retries unless your application has a reconciliation mechanism.