C# SDK
Installa e configura l'SDK C# di Anthropic per applicazioni .NET con integrazione IChatClient
L'SDK C# di Anthropic fornisce un accesso comodo alla Claude API da applicazioni scritte in C#.
Installazione
Installa il pacchetto da NuGet:
dotnet add package AnthropicRequisiti
Questa libreria richiede .NET Standard 2.0 o versioni successive.
Utilizzo
using System;
using Anthropic;
using Anthropic.Models.Messages;
AnthropicClient client = new();
MessageCreateParams parameters = new()
{
MaxTokens = 1024,
Messages = [new UserMessageParam { Content = "Hello, Claude" }],
Model = Model.ClaudeOpus5_5,
};
var message = await client.Messages.Create(parameters);
foreach (var block in message.Content)
{
if (block.TryPickText(out var textBlock))
{
Console.WriteLine(textBlock.Text);
}
}Per le opzioni di autenticazione, inclusa la Workload Identity Federation, consulta Autenticazione. Se la tua chiave API è una chiave personale o di account di servizio che non è limitata a un workspace, imposta l'ID del workspace nell'header di richiesta anthropic-workspace-id; Selezionare un workspace mostra l'opzione per singola richiesta per questo SDK.
Configurazione del client
Configura il client usando le variabili d'ambiente:
using Anthropic;
// Configurato tramite le variabili d'ambiente ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN e ANTHROPIC_BASE_URL
AnthropicClient client = new();Oppure manualmente:
using Anthropic;
AnthropicClient client = new() { ApiKey = "my-anthropic-api-key" };Oppure usando una combinazione dei due approcci.
Consulta questa tabella per le opzioni disponibili:
| Proprietà | Variabile d'ambiente | Obbligatoria | Valore predefinito |
|---|---|---|---|
ApiKey | ANTHROPIC_API_KEY | false | - |
AuthToken | ANTHROPIC_AUTH_TOKEN | false | - |
BaseUrl | ANTHROPIC_BASE_URL | true | "https://api.anthropic.com" |
Modificare la configurazione
Per usare temporaneamente una configurazione del client modificata, riutilizzando gli stessi pool di connessioni e di thread, chiama WithOptions su qualsiasi client o servizio:
using System;
var message = await client
.WithOptions(options =>
options with
{
BaseUrl = "https://example.com",
Timeout = TimeSpan.FromSeconds(42),
}
)
.Messages.Create(parameters);
Console.WriteLine(message);L'uso di un'espressione with semplifica la costruzione delle opzioni modificate.
Il metodo WithOptions non influisce sul client o sul servizio originale.
Streaming
L'SDK definisce metodi che restituiscono stream di "chunk" (blocchi) di risposta, in cui ogni chunk può essere elaborato singolarmente non appena arriva, invece di attendere la risposta completa. I metodi di streaming corrispondono generalmente a risposte SSE o JSONL.
Un metodo di streaming ha sempre il suffisso Streaming nel nome, anche se non ha una variante non in streaming.
Questi metodi di streaming restituiscono IAsyncEnumerable:
using System;
using Anthropic.Models.Messages;
MessageCreateParams parameters = new()
{
MaxTokens = 1024,
Messages = [new UserMessageParam { Content = "Hello, Claude" }],
Model = Model.ClaudeOpus5_5,
};
await foreach (var message in client.Messages.CreateStreaming(parameters))
{
Console.WriteLine(message);
}Gestione degli errori
L'SDK genera tipi di eccezione personalizzati non controllati (unchecked):
AnthropicApiException: classe base per gli errori dell'API. Consulta questa tabella per sapere quale sottoclasse di eccezione viene generata per ciascun codice di stato HTTP:
| Stato | Eccezione |
|---|---|
| 400 | AnthropicBadRequestException |
| 401 | AnthropicUnauthorizedException |
| 403 | AnthropicForbiddenException |
| 404 | AnthropicNotFoundException |
| 422 | AnthropicUnprocessableEntityException |
| 429 | AnthropicRateLimitException |
| 5xx | Anthropic5xxException |
| altri | AnthropicUnexpectedStatusCodeException |
Inoltre, tutti gli errori 4xx ereditano da Anthropic4xxException.
-
AnthropicSseException: generata per errori riscontrati durante lo streaming SSE dopo una risposta HTTP iniziale riuscita. -
AnthropicIOException: errori di rete di I/O. -
AnthropicInvalidDataException: impossibilità di interpretare dati analizzati correttamente. Ad esempio, quando si accede a una proprietà che dovrebbe essere obbligatoria, ma l'API l'ha inaspettatamente omessa dalla risposta. -
AnthropicException: classe base per tutte le eccezioni.
Tentativi ripetuti
Per impostazione predefinita, l'SDK ripete automaticamente la richiesta 2 volte, con un breve backoff esponenziale tra le richieste.
Vengono ripetuti solo i seguenti tipi di errore:
- Errori di connessione (ad esempio, a causa di un problema di connettività di rete)
- 408 Request Timeout
- 409 Conflict
- 429 Rate Limit
- 5xx Internal
L'API può anche indicare esplicitamente all'SDK di ripetere o non ripetere una richiesta.
Per impostare un numero personalizzato di tentativi, configura il client usando la proprietà MaxRetries:
using Anthropic;
AnthropicClient client = new() { MaxRetries = 3 };Oppure configura una singola chiamata di metodo usando WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { MaxRetries = 3 }
)
.Messages.Create(parameters);
Console.WriteLine(message);Timeout
Per impostazione predefinita, le richieste scadono dopo 10 minuti.
Per impostare un timeout personalizzato, configura il client usando l'opzione Timeout:
using System;
using Anthropic;
AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };Oppure configura una singola chiamata di metodo usando WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { Timeout = TimeSpan.FromSeconds(42) }
)
.Messages.Create(parameters);
Console.WriteLine(message);Paginazione
L'SDK definisce metodi che restituiscono elenchi paginati di risultati. Offre modi comodi per accedere ai risultati una pagina alla volta oppure elemento per elemento su tutte le pagine.
Paginazione automatica
Per scorrere tutti i risultati su tutte le pagine, usa il metodo Paginate, che recupera automaticamente altre pagine secondo necessità. Il metodo restituisce un IAsyncEnumerable:
using System;
var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
Console.WriteLine(item);
}Paginazione manuale
Per accedere ai singoli elementi della pagina e richiedere manualmente la pagina successiva, usa la proprietà Items e i metodi HasNext e Next:
var page = await client.Messages.Batches.List();
while (true)
{
foreach (var item in page.Items)
{
Console.WriteLine(item);
}
if (!page.HasNext())
{
break;
}
page = await page.Next();
}Validazione delle risposte
In rari casi, l'API può restituire una risposta che non corrisponde al tipo previsto. Per impostazione predefinita, in questo caso l'SDK non genera un'eccezione. Genera AnthropicInvalidDataException solo se accedi direttamente alla proprietà.
Se preferisci verificare in anticipo che la risposta sia completamente ben tipizzata, chiama Validate:
var message = await client.Messages.Create(parameters);
message.Validate();Oppure configura il client usando l'opzione ResponseValidation:
using Anthropic;
AnthropicClient client = new() { ResponseValidation = true };Oppure configura una singola chiamata di metodo usando WithOptions:
using System;
var message = await client
.WithOptions(options =>
options with { ResponseValidation = true }
)
.Messages.Create(parameters);
Console.WriteLine(message);Integrazione con IChatClient
L'SDK fornisce un'implementazione dell'interfaccia IChatClient della libreria Microsoft.Extensions.AI.Abstractions. Ciò consente di usare AnthropicClient (e Anthropic.Services.IBetaService) con altre librerie che si integrano con queste astrazioni di base. Ad esempio, gli strumenti della libreria MCP C# SDK (ModelContextProtocol) possono essere usati direttamente con un AnthropicClient esposto tramite IChatClient.
using Anthropic;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
// Configurato tramite le variabili d'ambiente ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN e ANTHROPIC_BASE_URL
AnthropicClient client = new();
IChatClient chatClient = client.AsIChatClient("claude-opus-5-5")
.AsBuilder()
.UseFunctionInvocation()
.Build();
// Uso di McpClient dall'SDK C# di MCP
McpClient learningServer = await McpClient.CreateAsync(
new HttpClientTransport(new() { Endpoint = new("https://learn.microsoft.com/api/mcp") }));
ChatOptions options = new() { Tools = [.. await learningServer.ListToolsAsync()] };
Console.WriteLine(await chatClient.GetResponseAsync("Tell me about IChatClient", options));Richieste e risposte
Per inviare una richiesta alla Claude API, crea un'istanza di una classe Params e passala al metodo del client corrispondente. Quando la risposta viene ricevuta, viene deserializzata in un'istanza di una classe C#.
Ad esempio, client.Messages.Create deve essere chiamato con un'istanza di MessageCreateParams e restituirà un'istanza di Task<Message>.
Utilizzo avanzato
Risposte binarie
L'SDK definisce metodi che restituiscono risposte binarie, usati per le risposte dell'API che non devono necessariamente essere analizzate, come i dati non JSON.
Questi metodi restituiscono HttpResponse:
using System;
using Anthropic.Models.Files;
FileDownloadParams parameters = new() { FileID = "file_id" };
var response = await client.Files.Download(parameters);
Console.WriteLine(response);Per salvare il contenuto della risposta in un file, o in qualsiasi Stream, usa il metodo CopyToAsync:
using System.IO;
using var response = await client.Files.Download(parameters);
using var contentStream = await response.ReadAsStream();
using var fileStream = File.Open(path, FileMode.OpenOrCreate);
await contentStream.CopyToAsync(fileStream); // Or any other StreamRisposte grezze
L'SDK definisce metodi che deserializzano le risposte in istanze di classi C#. Per accedere alle intestazioni della risposta, al codice di stato o al corpo grezzo della risposta, anteponi WithRawResponse a qualsiasi chiamata di metodo HTTP su un client o servizio:
var response = await client.WithRawResponse.Messages.Create(parameters);
var statusCode = response.StatusCode;
var headers = response.Headers;È possibile accedere all'HttpResponseMessage grezzo anche tramite la proprietà RawMessage.
Per le risposte non in streaming, puoi deserializzare la risposta in un'istanza di una classe C#, se necessario:
using System;
using Anthropic.Models.Messages;
var response = await client.WithRawResponse.Messages.Create(parameters);
Message deserialized = await response.Deserialize();
Console.WriteLine(deserialized);Per le risposte in streaming, puoi deserializzare la risposta in un IAsyncEnumerable, se necessario:
using System;
var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
Console.WriteLine(item);
}Logging
Abilita il logging di debug impostando una variabile d'ambiente:
export ANTHROPIC_LOG=debugTracciamento OpenTelemetry
Quando la tua applicazione aggiunge le sorgenti dell'SDK al suo tracer provider OpenTelemetry con AddSource("com.anthropic.sdk.csharp*"), l'SDK emette uno span per ogni richiesta che invia. Per inviare gli span alla tua piattaforma di osservabilità, consulta Configurare OpenTelemetry con il Claude SDK.
Funzionalità dell'API non documentate
L'SDK è tipizzato per un utilizzo comodo dell'API documentata. Tuttavia, supporta anche l'uso di parti dell'API non documentate o non ancora supportate.
Integrazioni con le piattaforme
L'SDK C# supporta le seguenti piattaforme tramite pacchetti NuGet separati:
- Agent Platform:
Anthropic.Vertex. Consulta Claude Models on Google Cloud (Google managed) per la configurazione del client. - Bedrock:
Anthropic.Bedrock. UsaAnthropicBedrockMantleClientper l'endpoint Bedrock della Messages API, oppureAnthropicBedrockClient(percorsobedrock-runtime).AnthropicBedrockMantleClientaccetta un oggetto di configurazioneMantleAwsClientOptionsfacoltativo;AnthropicBedrockClientaccettaAnthropicBedrockCredentialsHelper.FromEnv()o credenziali esplicite. - Claude Platform on AWS:
Anthropic.Aws. UsaAnthropicAwsClient; impostaWorkspaceIdsul client o la variabile d'ambienteANTHROPIC_AWS_WORKSPACE_ID(consulta Workspace). Disponibile in beta. - Foundry:
Anthropic.Foundry. UsaAnthropicFoundryClientconDefaultAnthropicFoundryCredentials.FromEnv()o credenziali esplicite.
Usa AnthropicBedrockMantleClient per i nuovi progetti; AnthropicBedrockClient rimane disponibile per le applicazioni esistenti che usano l'API InvokeModel di Bedrock.
L'SDK C# supporta anche Claude Models on Google Cloud (Anthropic managed) tramite AnthropicGoogleCloudClient, dal pacchetto Anthropic.GoogleCloud. Questo client è in beta. Imposta WorkspaceId su un valore GoogleCloudClientOptions opzionale, oppure imposta la variabile d'ambiente ANTHROPIC_GOOGLE_CLOUD_WORKSPACE_ID. Consulta Risoluzione di progetto, location e workspace.
Versionamento semantico
Ogni versione major di questo SDK invia per impostazione predefinita una versione dell'API nell'intestazione anthropic-version, e una nuova versione major accompagna ogni nuova versione dell'API. La prima versione major che invia 2026-10-21 è la 13.0.0; consulta Migrazione alla versione dell'API 2026-10-21.
Questo pacchetto segue generalmente le convenzioni SemVer, anche se alcune modifiche non retrocompatibili potrebbero essere rilasciate come versioni minor:
- Modifiche agli elementi interni della libreria che sono tecnicamente pubblici ma non destinati o documentati per l'uso esterno.
- Modifiche che non si prevede abbiano un impatto sulla grande maggioranza degli utenti nella pratica.
La retrocompatibilità viene presa sul serio per garantire che tu possa contare su un'esperienza di aggiornamento senza intoppi.
Risorse aggiuntive
Was this page helpful?