---
title: SDK C#
url: https://platform.claude.com/docs/it/cli-sdks-libraries/sdks/csharp
description: 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#.

<Info>
  Per la documentazione delle funzionalità dell'API con esempi di codice, consulta il [riferimento API](https://platform.claude.com/docs/it/api/overview). Questa pagina copre le funzionalità e la configurazione dell'SDK specifiche per C#.
</Info>

<Warning>
  A partire dalla versione 10+, il pacchetto `Anthropic` è ora l'SDK ufficiale di Anthropic per C#. Le versioni del pacchetto 3.X e precedenti erano in precedenza utilizzate per l'SDK sviluppato dalla community tryAGI, che è stato spostato in [`tryAGI.Anthropic`](https://www.nuget.org/packages/tryagi.Anthropic/). Se hai bisogno di continuare a usare il client precedente nel tuo progetto, aggiorna il riferimento al pacchetto in `tryAGI.Anthropic`.
</Warning>

## Installazione

Installa il pacchetto da [NuGet](https://www.nuget.org/packages/Anthropic):

```bash
dotnet add package Anthropic
```

## Requisiti

Questa libreria richiede .NET Standard 2.0 o successivo.

## Utilizzo

```csharp
using System;
using Anthropic;
using Anthropic.Models.Messages;

AnthropicClient client = new();

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages =
    [
        new()
        {
            Role = Role.User,
            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](https://platform.claude.com/docs/it/manage-claude/authentication). Se la tua chiave API è una [chiave personale o di account di servizio](https://platform.claude.com/docs/it/manage-claude/authentication#key-types) con accesso a più workspace, imposta l'ID del workspace nell'header di richiesta `anthropic-workspace-id`; [Seleziona un workspace](https://platform.claude.com/docs/it/manage-claude/authentication#select-a-workspace) mostra l'opzione per singola richiesta per questo SDK.

## Configurazione del client

Configura il client usando le variabili d'ambiente:

```csharp
using Anthropic;

// Configurato tramite le variabili d'ambiente ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN e ANTHROPIC_BASE_URL
AnthropicClient client = new();
```

Oppure manualmente:

```csharp
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"` |

### Modifica della configurazione

Per usare temporaneamente una configurazione del client modificata, riutilizzando la stessa connessione e gli stessi pool di thread, chiama `WithOptions` su qualsiasi client o servizio:

```csharp
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`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/with-expression) rende semplice costruire le opzioni modificate.

Il metodo `WithOptions` non influisce sul client o sul servizio originale.

## Streaming

L'SDK definisce metodi che restituiscono stream di "chunk" (frammenti) 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](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) o [JSONL](https://jsonlines.org).

Un metodo di streaming ha sempre il suffisso `Streaming` nel nome, anche se non ha una variante non-streaming.

Questi metodi di streaming restituiscono [`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1):

```csharp
using System;
using Anthropic.Models.Messages;

MessageCreateParams parameters = new()
{
    MaxTokens = 1024,
    Messages =
    [
        new()
        {
            Role = Role.User,
            Content = "Hello, Claude",
        },
    ],
    Model = Model.ClaudeOpus5_5,
};

await foreach (var message in client.Messages.CreateStreaming(parameters))
{
    Console.WriteLine(message);
}
```

## Gestione degli errori

L'SDK lancia tipi di eccezioni personalizzate non controllate (unchecked):

* `AnthropicApiException`: classe base per gli errori dell'API. Consulta questa tabella per sapere quale sottoclasse di eccezione viene lanciata 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`: lanciata per errori riscontrati durante lo streaming SSE dopo una risposta HTTP iniziale riuscita.

* `AnthropicIOException`: errori di rete I/O.

* `AnthropicInvalidDataException`: impossibilità di interpretare dati analizzati con successo. Ad esempio, quando si accede a una proprietà che dovrebbe essere obbligatoria, ma che l'API ha inaspettatamente omesso dalla risposta.

* `AnthropicException`: classe base per tutte le eccezioni.

## Tentativi ripetuti

L'SDK riprova automaticamente 2 volte per impostazione predefinita, con un breve backoff esponenziale tra le richieste.

Vengono ritentati 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 (limite di velocità)
* 5xx Internal

L'API può anche istruire esplicitamente l'SDK a ritentare o non ritentare una richiesta.

Per impostare un numero personalizzato di tentativi, configura il client usando la proprietà `MaxRetries`:

```csharp
using Anthropic;

AnthropicClient client = new() { MaxRetries = 3 };
```

Oppure configura una singola chiamata di metodo usando `WithOptions`:

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with { MaxRetries = 3 }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

## Timeout

Le richieste vanno in timeout dopo 10 minuti per impostazione predefinita.

Per impostare un timeout personalizzato, configura il client usando l'opzione `Timeout`:

```csharp
using System;
using Anthropic;

AnthropicClient client = new() { Timeout = TimeSpan.FromSeconds(42) };
```

Oppure configura una singola chiamata di metodo usando `WithOptions`:

```csharp
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. Fornisce modi comodi per accedere ai risultati una pagina alla volta oppure elemento per elemento attraverso tutte le pagine.

### Paginazione automatica

Per iterare su tutti i risultati di tutte le pagine, usa il metodo `Paginate`, che recupera automaticamente altre pagine secondo necessità. Il metodo restituisce un [`IAsyncEnumerable`](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.iasyncenumerable-1):

```csharp
using System;

var page = await client.Messages.Batches.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}
```

### Paginazione manuale

Per accedere agli elementi di una singola pagina e richiedere manualmente la pagina successiva, usa la proprietà `Items` e i metodi `HasNext` e `Next`:

```csharp
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, l'SDK non lancia un'eccezione in questo caso. Lancia `AnthropicInvalidDataException` solo se accedi direttamente alla proprietà.

Se preferisci verificare in anticipo che la risposta sia completamente ben tipizzata, chiama `Validate`:

```csharp
var message = await client.Messages.Create(parameters);
message.Validate();
```

Oppure configura il client usando l'opzione `ResponseValidation`:

```csharp
using Anthropic;

AnthropicClient client = new() { ResponseValidation = true };
```

Oppure configura una singola chiamata di metodo usando `WithOptions`:

```csharp
using System;

var message = await client
    .WithOptions(options =>
        options with { ResponseValidation = true }
    )
    .Messages.Create(parameters);

Console.WriteLine(message);
```

## Integrazione IChatClient

L'SDK fornisce un'implementazione dell'interfaccia `IChatClient` della libreria `Microsoft.Extensions.AI.Abstractions`. Questo 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`.

```csharp
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, costruisci 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, usate per risposte dell'API che non devono necessariamente essere analizzate, come dati non JSON.

Questi metodi restituiscono `HttpResponse`:

```csharp
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`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream), usa il metodo [`CopyToAsync`](https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.copytoasync):

```csharp
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 Stream
```

### Risposte 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:

```csharp
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-streaming, puoi deserializzare la risposta in un'istanza di una classe C# se necessario:

```csharp
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:

```csharp
using System;

var response = await client.WithRawResponse.Messages.CreateStreaming(parameters);
await foreach (var item in response.Enumerate())
{
    Console.WriteLine(item);
}
```

### Logging

<Warning>
  Tutti i messaggi di log sono destinati esclusivamente al debug. Il formato e il contenuto dei messaggi di log potrebbero cambiare tra le versioni.
</Warning>

Abilita il logging di debug impostando una variabile d'ambiente:

```bash
export ANTHROPIC_LOG=debug
```

### 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

<Note>
  Per guide dettagliate alla configurazione delle piattaforme con esempi di codice, consulta:

  * [Amazon Bedrock](https://platform.claude.com/docs/it/build-with-claude/claude-in-amazon-bedrock)
  * [Amazon Bedrock (Opus 4.6 e precedenti)](https://platform.claude.com/docs/it/build-with-claude/claude-on-amazon-bedrock-legacy)
  * [Claude Platform on AWS](https://platform.claude.com/docs/it/build-with-claude/claude-platform-on-aws)
  * [Google Cloud](https://platform.claude.com/docs/it/build-with-claude/claude-on-vertex-ai)
  * [Microsoft Foundry](https://platform.claude.com/docs/it/build-with-claude/claude-in-microsoft-foundry)
</Note>

L'SDK C# supporta le seguenti piattaforme tramite pacchetti NuGet separati:

* **Agent Platform:** `Anthropic.Vertex`. Consulta [Claude su Google Cloud](https://platform.claude.com/docs/it/build-with-claude/claude-on-vertex-ai) per la configurazione del client.
* **Bedrock:** `Anthropic.Bedrock`. Usa `AnthropicBedrockMantleClient` per l'endpoint Bedrock della Messages API, oppure `AnthropicBedrockClient` (percorso `bedrock-runtime`). `AnthropicBedrockMantleClient` accetta un oggetto di configurazione opzionale `MantleAwsClientOptions`; `AnthropicBedrockClient` accetta `AnthropicBedrockCredentialsHelper.FromEnv()` o credenziali esplicite.
* **Claude Platform on AWS:** `Anthropic.Aws`. Usa `AnthropicAwsClient`; imposta `WorkspaceId` sul client oppure la variabile d'ambiente `ANTHROPIC_AWS_WORKSPACE_ID` (consulta [Workspace](https://platform.claude.com/docs/it/build-with-claude/claude-platform-on-aws#workspaces)). Disponibile in beta.
* **Foundry:** `Anthropic.Foundry`. Usa `AnthropicFoundryClient` con `DefaultAnthropicFoundryCredentials.FromEnv()` o credenziali esplicite.

Usa `AnthropicBedrockMantleClient` per i nuovi progetti; `AnthropicBedrockClient` rimane disponibile per le applicazioni esistenti che usano l'API `InvokeModel` di Bedrock.

## Versionamento semantico

Questo pacchetto segue generalmente le convenzioni [SemVer](https://semver.org/spec/v2.0.0.html), anche se alcune modifiche non retrocompatibili potrebbero essere rilasciate come versioni minor:

1. Modifiche a parti interne della libreria che sono tecnicamente pubbliche ma non destinate o documentate per l'uso esterno.
2. Modifiche che, nella pratica, non dovrebbero avere impatto sulla grande maggioranza degli utenti.

La retrocompatibilità viene presa sul serio per garantire che tu possa contare su un'esperienza di aggiornamento senza intoppi.

## Risorse aggiuntive

* [Repository GitHub](https://github.com/anthropics/anthropic-sdk-csharp)
* [Pacchetto NuGet](https://www.nuget.org/packages/Anthropic)
* [Riferimento API](https://platform.claude.com/docs/it/api/overview)
* [Streaming dei messaggi](https://platform.claude.com/docs/it/build-with-claude/streaming)
