Artificial intelligence is becoming a normal element in contemporary software, rather than a futuristic add-on. .NET developers can now include sophisticated AI features straight into their apps thanks to Anthropic’s Claude API. Claude makes it feasible to provide more intelligent user experiences with less work, from enterprise automation tools to intelligent chatbots and document analyzers.
This article will discuss how to use C# to include Claude AI into an ASP.NET Core app. Along the way, you’ll learn how to create a service layer, configure the API, and use REST endpoints to offer AI capabilities.
Getting Initiated
Setting Up the Project
Start by creating a new Web API project:
dotnet new webapi -n ClaudeAIIntegration
cd ClaudeAIIntegration
dotnet run
Next, install the required packages:
1 2 | dotnet <span class="token function">add</span> package Microsoft.Extensions.Http dotnet <span class="token function">add</span> package Newtonsoft.Json |
Configuring Claude
Add your Claude API settings to appsettings.json:
1 2 3 4 5 6 7 | <span class="token punctuation">{</span> <span class="token property">"ClaudeAI"</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token property">"ApiKey"</span><span class="token operator">:</span> <span class="token string">"YOUR_API_KEY"</span><span class="token punctuation">,</span> <span class="token property">"BaseUrl"</span><span class="token operator">:</span> <span class="token string">"https://api.anthropic.com/v1/messages"</span><span class="token punctuation">,</span> <span class="token property">"Model"</span><span class="token operator">:</span> <span class="token string">"claude-sonnet-4-0"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Then create a simple configuration model:
1 2 3 4 5 6 | <span class="token keyword keyword-public">public</span> <span class="token keyword keyword-class">class</span> <span class="token class-name">ClaudeSettings</span> <span class="token punctuation">{</span> <span class="token keyword keyword-public">public</span> <span class="token return-type class-name"><span class="token keyword keyword-string">string</span></span> ApiKey <span class="token punctuation">{</span> <span class="token keyword keyword-get">get</span><span class="token punctuation">;</span> <span class="token keyword keyword-set">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword keyword-public">public</span> <span class="token return-type class-name"><span class="token keyword keyword-string">string</span></span> BaseUrl <span class="token punctuation">{</span> <span class="token keyword keyword-get">get</span><span class="token punctuation">;</span> <span class="token keyword keyword-set">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword keyword-public">public</span> <span class="token return-type class-name"><span class="token keyword keyword-string">string</span></span> Model <span class="token punctuation">{</span> <span class="token keyword keyword-get">get</span><span class="token punctuation">;</span> <span class="token keyword keyword-set">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Building the Service Layer
The heart of the integration is a service that communicates with Claude.
Here’s a streamlined version:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <span class="token keyword keyword-public">public</span> <span class="token keyword keyword-class">class</span> <span class="token class-name">ClaudeService</span> <span class="token punctuation">{</span> <span class="token keyword keyword-private">private</span> <span class="token keyword keyword-readonly">readonly</span> <span class="token class-name">HttpClient</span> _httpClient<span class="token punctuation">;</span> <span class="token keyword keyword-private">private</span> <span class="token keyword keyword-readonly">readonly</span> <span class="token class-name">IConfiguration</span> _configuration<span class="token punctuation">;</span> <span class="token keyword keyword-public">public</span> <span class="token function">ClaudeService</span><span class="token punctuation">(</span><span class="token class-name">HttpClient</span> httpClient<span class="token punctuation">,</span> <span class="token class-name">IConfiguration</span> configuration<span class="token punctuation">)</span> <span class="token punctuation">{</span> _httpClient <span class="token operator">=</span> httpClient<span class="token punctuation">;</span> _configuration <span class="token operator">=</span> configuration<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword keyword-public">public</span> <span class="token keyword keyword-async">async</span> <span class="token return-type class-name">Task<span class="token punctuation"><</span><span class="token keyword keyword-string">string</span><span class="token punctuation">></span></span> <span class="token function">GetResponseAsync</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword keyword-string">string</span></span> prompt<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> apiKey <span class="token operator">=</span> _configuration<span class="token punctuation">[</span><span class="token string">"ClaudeAI:ApiKey"</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> model <span class="token operator">=</span> _configuration<span class="token punctuation">[</span><span class="token string">"ClaudeAI:Model"</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> endpoint <span class="token operator">=</span> _configuration<span class="token punctuation">[</span><span class="token string">"ClaudeAI:BaseUrl"</span><span class="token punctuation">]</span><span class="token punctuation">;</span> _httpClient<span class="token punctuation">.</span>DefaultRequestHeaders<span class="token punctuation">.</span><span class="token function">Clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> _httpClient<span class="token punctuation">.</span>DefaultRequestHeaders<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span><span class="token string">"x-api-key"</span><span class="token punctuation">,</span> apiKey<span class="token punctuation">)</span><span class="token punctuation">;</span> _httpClient<span class="token punctuation">.</span>DefaultRequestHeaders<span class="token punctuation">.</span><span class="token function">Add</span><span class="token punctuation">(</span><span class="token string">"anthropic-version"</span><span class="token punctuation">,</span> <span class="token string">"2023-06-01"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> requestBody <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token punctuation">{</span> model<span class="token punctuation">,</span> max_tokens <span class="token operator">=</span> <span class="token number">1024</span><span class="token punctuation">,</span> messages <span class="token operator">=</span> <span class="token keyword keyword-new">new</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span> <span class="token keyword keyword-new">new</span> <span class="token punctuation">{</span> role <span class="token operator">=</span> <span class="token string">"user"</span><span class="token punctuation">,</span> content <span class="token operator">=</span> prompt <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> json <span class="token operator">=</span> JsonConvert<span class="token punctuation">.</span><span class="token function">SerializeObject</span><span class="token punctuation">(</span>requestBody<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> content <span class="token operator">=</span> <span class="token keyword keyword-new">new</span> <span class="token constructor-invocation class-name">StringContent</span><span class="token punctuation">(</span>json<span class="token punctuation">,</span> Encoding<span class="token punctuation">.</span>UTF8<span class="token punctuation">,</span> <span class="token string">"application/json"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> response <span class="token operator">=</span> <span class="token keyword keyword-await">await</span> _httpClient<span class="token punctuation">.</span><span class="token function">PostAsync</span><span class="token punctuation">(</span>endpoint<span class="token punctuation">,</span> content<span class="token punctuation">)</span><span class="token punctuation">;</span> response<span class="token punctuation">.</span><span class="token function">EnsureSuccessStatusCode</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-return">return</span> <span class="token keyword keyword-await">await</span> response<span class="token punctuation">.</span>Content<span class="token punctuation">.</span><span class="token function">ReadAsStringAsync</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Register the service in Program.cs:
1 2 | builder<span class="token punctuation">.</span>Services<span class="token punctuation">.</span><span class="token function">AddHttpClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> builder<span class="token punctuation">.</span>Services<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">AddScoped</span><span class="token generic class-name"><span class="token punctuation"><</span>ClaudeService<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Exposing the API
Create a controller to handle requests:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">ApiController</span></span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">Route</span><span class="token attribute-arguments"><span class="token punctuation">(</span><span class="token string">"api/[controller]"</span><span class="token punctuation">)</span></span></span><span class="token punctuation">]</span> <span class="token keyword keyword-public">public</span> <span class="token keyword keyword-class">class</span> <span class="token class-name">ClaudeController</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">ControllerBase</span></span> <span class="token punctuation">{</span> <span class="token keyword keyword-private">private</span> <span class="token keyword keyword-readonly">readonly</span> <span class="token class-name">ClaudeService</span> _claudeService<span class="token punctuation">;</span> <span class="token keyword keyword-public">public</span> <span class="token function">ClaudeController</span><span class="token punctuation">(</span><span class="token class-name">ClaudeService</span> claudeService<span class="token punctuation">)</span> <span class="token punctuation">{</span> _claudeService <span class="token operator">=</span> claudeService<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">HttpPost</span></span><span class="token punctuation">]</span> <span class="token keyword keyword-public">public</span> <span class="token keyword keyword-async">async</span> <span class="token return-type class-name">Task<span class="token punctuation"><</span>IActionResult<span class="token punctuation">></span></span> <span class="token function">Ask</span><span class="token punctuation">(</span><span class="token class-name">ClaudeRequest</span> request<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name"><span class="token keyword keyword-var">var</span></span> result <span class="token operator">=</span> <span class="token keyword keyword-await">await</span> _claudeService<span class="token punctuation">.</span><span class="token function">GetResponseAsync</span><span class="token punctuation">(</span>request<span class="token punctuation">.</span>Prompt<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword keyword-return">return</span> <span class="token function">Ok</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Now you can send a POST request like:
1 2 3 | <span class="token punctuation">{</span> <span class="token property">"prompt"</span><span class="token operator">:</span> <span class="token string">"Explain dependency injection in .NET"</span> <span class="token punctuation">}</span> |
And receive a structured AI-generated response.
Production Considerations
To make your integration robust:
- Secure API keys with tools like Azure Key Vault or AWS Secrets Manager.
- Rate limit requests to prevent abuse.
- Log and monitor with Serilog, Application Insights, or OpenTelemetry.
- Cache responses to reduce costs for repeated queries.
Real-World Applications
Claude AI opens up a wide range of possibilities:
- AI chatbots for customer support
- Document analysis for contracts and reports
- Knowledge base search with vector databases
- Content generation for technical documentation
- Enterprise assistants for internal knowledge access
Summary
Claude AI can be integrated into ASP.NET Core applications using a simple service layer built around HttpClient. By configuring API settings, creating a reusable service, and exposing functionality through Web API endpoints, developers can add AI-powered capabilities to their applications quickly and efficiently. With proper security, monitoring, and scalability practices, this approach can be extended to build chatbots, document processing systems, enterprise assistants, and other intelligent solutions.
Best ASP.NET 10.0 Hosting
A solid base for developing online services and applications is ASP.NET. Before creating an ASP.NET web application, you must be proficient in JavaScript, HTML, CSS, and C#. There are thousands of web hosting providers offering ASP.NET hosting on the market. However, there are relatively few web hosting providers that offer top-notch ASP.NET hosting.
ASP.NET is the best development language in Windows platform, which is released by Microsoft and widely used to build all types of dynamic Web sites and XML Web services. With this article, we’re going to help you to find the best ASP.NET Hosting solution in Europe based on reliability, features, price, performance and technical support. After we reviewed about 30+ ASP.NET hosting providers in Europe, our Best ASP.NET Hosting Award in Europe goes to HostForLIFE.eu, one of the fastest growing private companies and one of the most reliable hosting providers in Europe.
